Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitfbf9ada

Browse files
author
Nikita Glukhov
committed
Move checkStringLen() to convertJsonbScalar()
1 parent7ace019 commitfbf9ada

File tree

2 files changed

+12
-17
lines changed

2 files changed

+12
-17
lines changed

‎src/backend/utils/adt/jsonb.c‎

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ typedef struct JsonbAggState
4747
}JsonbAggState;
4848

4949
staticinlineDatumjsonb_from_cstring(char*json,intlen,boolunique_keys);
50-
staticsize_tcheckStringLen(size_tlen);
5150
staticvoidjsonb_in_object_start(void*pstate);
5251
staticvoidjsonb_in_object_end(void*pstate);
5352
staticvoidjsonb_in_array_start(void*pstate);
@@ -266,18 +265,6 @@ jsonb_from_cstring(char *json, int len, bool unique_keys)
266265
PG_RETURN_JSONB_P(JsonbValueToJsonb(state.res));
267266
}
268267

269-
staticsize_t
270-
checkStringLen(size_tlen)
271-
{
272-
if (len>JENTRY_OFFLENMASK)
273-
ereport(ERROR,
274-
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
275-
errmsg("string too long to represent as jsonb string"),
276-
errdetail("Due to an implementation restriction, jsonb strings cannot exceed %d bytes.",
277-
JENTRY_OFFLENMASK)));
278-
279-
returnlen;
280-
}
281268

282269
staticvoid
283270
jsonb_in_object_start(void*pstate)
@@ -320,7 +307,7 @@ jsonb_in_object_field_start(void *pstate, char *fname, bool isnull)
320307

321308
Assert(fname!=NULL);
322309
v.type=jbvString;
323-
v.val.string.len=checkStringLen(strlen(fname));
310+
v.val.string.len=strlen(fname);
324311
v.val.string.val=fname;
325312

326313
_state->res=pushJsonbValue(&_state->parseState,WJB_KEY,&v);
@@ -370,7 +357,7 @@ jsonb_in_scalar(void *pstate, char *token, JsonTokenType tokentype)
370357
caseJSON_TOKEN_STRING:
371358
Assert(token!=NULL);
372359
v.type=jbvString;
373-
v.val.string.len=checkStringLen(strlen(token));
360+
v.val.string.len=strlen(token);
374361
v.val.string.val=token;
375362
break;
376363
caseJSON_TOKEN_NUMBER:
@@ -860,7 +847,7 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
860847
default:
861848
outputstr=OidOutputFunctionCall(outfuncoid,val);
862849
jb.type=jbvString;
863-
jb.val.string.len=checkStringLen(strlen(outputstr));
850+
jb.val.string.len=strlen(outputstr);
864851
jb.val.string.val=outputstr;
865852
break;
866853
}

‎src/backend/utils/adt/jsonb_util.c‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1939,7 +1939,15 @@ convertJsonbScalar(StringInfo buffer, JEntry *jentry, const JsonbValue *scalarVa
19391939
break;
19401940

19411941
casejbvString:
1942-
appendToBuffer(buffer,scalarVal->val.string.val,scalarVal->val.string.len);
1942+
if (scalarVal->val.string.len>JENTRY_OFFLENMASK)
1943+
ereport(ERROR,
1944+
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
1945+
errmsg("string too long to represent as jsonb string"),
1946+
errdetail("Due to an implementation restriction, jsonb strings cannot exceed %d bytes.",
1947+
JENTRY_OFFLENMASK)));
1948+
1949+
appendToBuffer(buffer,scalarVal->val.string.val,
1950+
scalarVal->val.string.len);
19431951

19441952
*jentry=scalarVal->val.string.len;
19451953
break;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp