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

Commit59f29e4

Browse files
author
Nikita Glukhov
committed
Move checkStringLen() to convertJsonbScalar()
1 parentbbca0fe commit59f29e4

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
@@ -69,7 +69,6 @@ typedef struct JsonbAggState
6969
}JsonbAggState;
7070

7171
staticinlineDatumjsonb_from_cstring(char*json,intlen);
72-
staticsize_tcheckStringLen(size_tlen);
7372
staticvoidjsonb_in_object_start(void*pstate);
7473
staticvoidjsonb_in_object_end(void*pstate);
7574
staticvoidjsonb_in_array_start(void*pstate);
@@ -285,18 +284,6 @@ jsonb_from_cstring(char *json, int len)
285284
PG_RETURN_JSONB_P(JsonbValueToJsonb(state.res));
286285
}
287286

288-
staticsize_t
289-
checkStringLen(size_tlen)
290-
{
291-
if (len>JENTRY_OFFLENMASK)
292-
ereport(ERROR,
293-
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
294-
errmsg("string too long to represent as jsonb string"),
295-
errdetail("Due to an implementation restriction, jsonb strings cannot exceed %d bytes.",
296-
JENTRY_OFFLENMASK)));
297-
298-
returnlen;
299-
}
300287

301288
staticvoid
302289
jsonb_in_object_start(void*pstate)
@@ -338,7 +325,7 @@ jsonb_in_object_field_start(void *pstate, char *fname, bool isnull)
338325

339326
Assert(fname!=NULL);
340327
v.type=jbvString;
341-
v.val.string.len=checkStringLen(strlen(fname));
328+
v.val.string.len=strlen(fname);
342329
v.val.string.val=fname;
343330

344331
_state->res=pushJsonbValue(&_state->parseState,WJB_KEY,&v);
@@ -388,7 +375,7 @@ jsonb_in_scalar(void *pstate, char *token, JsonTokenType tokentype)
388375
caseJSON_TOKEN_STRING:
389376
Assert(token!=NULL);
390377
v.type=jbvString;
391-
v.val.string.len=checkStringLen(strlen(token));
378+
v.val.string.len=strlen(token);
392379
v.val.string.val=token;
393380
break;
394381
caseJSON_TOKEN_NUMBER:
@@ -887,7 +874,7 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
887874
default:
888875
outputstr=OidOutputFunctionCall(outfuncoid,val);
889876
jb.type=jbvString;
890-
jb.val.string.len=checkStringLen(strlen(outputstr));
877+
jb.val.string.len=strlen(outputstr);
891878
jb.val.string.val=outputstr;
892879
break;
893880
}

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

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

18661866
casejbvString:
1867-
appendToBuffer(buffer,scalarVal->val.string.val,scalarVal->val.string.len);
1867+
if (scalarVal->val.string.len>JENTRY_OFFLENMASK)
1868+
ereport(ERROR,
1869+
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
1870+
errmsg("string too long to represent as jsonb string"),
1871+
errdetail("Due to an implementation restriction, jsonb strings cannot exceed %d bytes.",
1872+
JENTRY_OFFLENMASK)));
1873+
1874+
appendToBuffer(buffer,scalarVal->val.string.val,
1875+
scalarVal->val.string.len);
18681876

18691877
*jentry=scalarVal->val.string.len;
18701878
break;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp