Skip to content

Commit 59f29e4

Browse files
author
Nikita Glukhov
committed
Move checkStringLen() to convertJsonbScalar()
1 parent bbca0fe commit 59f29e4

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
static inline Datum jsonb_from_cstring(char *json, int len);
72-
static size_t checkStringLen(size_t len);
7372
static void jsonb_in_object_start(void *pstate);
7473
static void jsonb_in_object_end(void *pstate);
7574
static void jsonb_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-
static size_t
289-
checkStringLen(size_t len)
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-
return len;
299-
}
300287

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