diff options
author | drh <> | 2023-10-07 19:40:20 +0000 |
---|---|---|
committer | drh <> | 2023-10-07 19:40:20 +0000 |
commit | 3efb2c47918e47c391d04b49cbebe24b31c3464b (patch) | |
tree | 00fa5591fbfb5d9164bd3fe5abe998cc7b278673 /src/json.c | |
parent | f26833d7837932c7a3ecc6522e439947e34074e0 (diff) | |
download | sqlite-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.c | 7 |
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; |