aboutsummaryrefslogtreecommitdiff
path: root/src/json.c
diff options
context:
space:
mode:
authordrh <>2023-10-07 19:40:20 +0000
committerdrh <>2023-10-07 19:40:20 +0000
commit3efb2c47918e47c391d04b49cbebe24b31c3464b (patch)
tree00fa5591fbfb5d9164bd3fe5abe998cc7b278673 /src/json.c
parentf26833d7837932c7a3ecc6522e439947e34074e0 (diff)
downloadsqlite-3efb2c47918e47c391d04b49cbebe24b31c3464b.tar.gz
sqlite-3efb2c47918e47c391d04b49cbebe24b31c3464b.zip
Improved detection of malformed JSONB when parsing it into a JsonNode array.
FossilOrigin-Name: ed99a788415e1f8375bd5ec004dd18b1cd0fae4aa94558170882ca487f6dff93
Diffstat (limited to 'src/json.c')
-rw-r--r--src/json.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/json.c b/src/json.c
index 6f31214f5..1cfaaaf58 100644
--- a/src/json.c
+++ b/src/json.c
@@ -3481,31 +3481,38 @@ static int jsonParseValueFromBlob(JsonParse *pParse, u32 i){
zPayload = &pParse->zJson[i+x];
switch( t ){
case JSONB_NULL: {
+ if( sz>0 ) return -1;
jsonParseAddNode(pParse, JSON_NULL, 0, 0);
break;
}
case JSONB_TRUE: {
+ if( sz>0 ) return -1;
jsonParseAddNode(pParse, JSON_TRUE, 0, 0);
break;
}
case JSONB_FALSE: {
+ if( sz>0 ) return -1;
jsonParseAddNode(pParse, JSON_FALSE, 0, 0);
break;
}
case JSONB_INT: {
+ if( sz==0 ) return -1;
jsonParseAddNode(pParse, JSON_INT, sz, zPayload);
break;
}
case JSONB_INT5: {
+ if( sz==0 ) return -1;
pParse->hasNonstd = 1;
jsonParseAddNode(pParse, JSON_INT | (JNODE_JSON5<<8), sz, zPayload);
break;
}
case JSONB_FLOAT: {
+ if( sz==0 ) return -1;
jsonParseAddNode(pParse, JSON_REAL, sz, zPayload);
break;
}
case JSONB_FLOAT5: {
+ if( sz==0 ) return -1;
pParse->hasNonstd = 1;
jsonParseAddNode(pParse, JSON_REAL | (JNODE_JSON5<<8), sz, zPayload);
break;