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

Commit7ad2220

Browse files
author
Nikita Glukhov
committed
Move checkStringLen() to convertJsonbScalar()
1 parent2bcf6bf commit7ad2220

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

7070
staticinlineDatumjsonb_from_cstring(char*json,intlen);
71-
staticsize_tcheckStringLen(size_tlen);
7271
staticvoidjsonb_in_object_start(void*pstate);
7372
staticvoidjsonb_in_object_end(void*pstate);
7473
staticvoidjsonb_in_array_start(void*pstate);
@@ -255,18 +254,6 @@ jsonb_from_cstring(char *json, int len)
255254
PG_RETURN_JSONB(JsonbValueToJsonb(state.res));
256255
}
257256

258-
staticsize_t
259-
checkStringLen(size_tlen)
260-
{
261-
if (len>JENTRY_OFFLENMASK)
262-
ereport(ERROR,
263-
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
264-
errmsg("string too long to represent as jsonb string"),
265-
errdetail("Due to an implementation restriction, jsonb strings cannot exceed %d bytes.",
266-
JENTRY_OFFLENMASK)));
267-
268-
returnlen;
269-
}
270257

271258
staticvoid
272259
jsonb_in_object_start(void*pstate)
@@ -308,7 +295,7 @@ jsonb_in_object_field_start(void *pstate, char *fname, bool isnull)
308295

309296
Assert(fname!=NULL);
310297
v.type=jbvString;
311-
v.val.string.len=checkStringLen(strlen(fname));
298+
v.val.string.len=strlen(fname);
312299
v.val.string.val=fname;
313300

314301
_state->res=pushJsonbValue(&_state->parseState,WJB_KEY,&v);
@@ -357,7 +344,7 @@ jsonb_in_scalar(void *pstate, char *token, JsonTokenType tokentype)
357344
caseJSON_TOKEN_STRING:
358345
Assert(token!=NULL);
359346
v.type=jbvString;
360-
v.val.string.len=checkStringLen(strlen(token));
347+
v.val.string.len=strlen(token);
361348
v.val.string.val=token;
362349
break;
363350
caseJSON_TOKEN_NUMBER:
@@ -899,7 +886,7 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
899886
default:
900887
outputstr=OidOutputFunctionCall(outfuncoid,val);
901888
jb.type=jbvString;
902-
jb.val.string.len=checkStringLen(strlen(outputstr));
889+
jb.val.string.len=strlen(outputstr);
903890
jb.val.string.val=outputstr;
904891
break;
905892
}

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

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

17781778
casejbvString:
1779-
appendToBuffer(buffer,scalarVal->val.string.val,scalarVal->val.string.len);
1779+
if (scalarVal->val.string.len>JENTRY_OFFLENMASK)
1780+
ereport(ERROR,
1781+
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
1782+
errmsg("string too long to represent as jsonb string"),
1783+
errdetail("Due to an implementation restriction, jsonb strings cannot exceed %d bytes.",
1784+
JENTRY_OFFLENMASK)));
1785+
1786+
appendToBuffer(buffer,scalarVal->val.string.val,
1787+
scalarVal->val.string.len);
17801788

17811789
*jentry=scalarVal->val.string.len;
17821790
break;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp