Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit fbf9ada

Browse files
author
Nikita Glukhov
committed
Move checkStringLen() to convertJsonbScalar()
1 parent 7ace019 commit fbf9ada

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
static inline Datum jsonb_from_cstring(char *json, int len, bool unique_keys);
50-
static size_t checkStringLen(size_t len);
5150
static void jsonb_in_object_start(void *pstate);
5251
static void jsonb_in_object_end(void *pstate);
5352
static void jsonb_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-
static size_t
270-
checkStringLen(size_t len)
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-
return len;
280-
}
281268

282269
static void
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
case JSON_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
case JSON_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
case jbvString:
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)