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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy