diff options
author | drh <> | 2023-12-06 17:39:31 +0000 |
---|---|---|
committer | drh <> | 2023-12-06 17:39:31 +0000 |
commit | b597fea89436a57b8b4bc39f24dc7e14f5e92dcb (patch) | |
tree | 0f284915fe657ccabc5847be0e9b327f1d2d4bc1 /src | |
parent | 3207199c98f4b876934dbd4d09615175e43e8b37 (diff) | |
download | sqlite-b597fea89436a57b8b4bc39f24dc7e14f5e92dcb.tar.gz sqlite-b597fea89436a57b8b4bc39f24dc7e14f5e92dcb.zip |
Correctly handle 8-byte sizes in the JSONB format.
[forum:/forumpost/283daf08e91183fc|Forum post 283daf08e91183fc].
FossilOrigin-Name: 73d390f39c0bbbc017e01544e4d43c76761f2599bd57f900131c706270dfd202
Diffstat (limited to 'src')
-rw-r--r-- | src/json.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/json.c b/src/json.c index 8165eb4f3..e91c9b86d 100644 --- a/src/json.c +++ b/src/json.c @@ -1792,7 +1792,7 @@ static u32 jsonbPayloadSize(const JsonParse *pParse, u32 i, u32 *pSz){ } sz = (pParse->aBlob[i+1]<<8) + pParse->aBlob[i+2]; n = 3; - }else{ + }else if( x==14 ){ if( i+4>=pParse->nBlob ){ *pSz = 0; return 0; @@ -1800,6 +1800,19 @@ static u32 jsonbPayloadSize(const JsonParse *pParse, u32 i, u32 *pSz){ sz = (pParse->aBlob[i+1]<<24) + (pParse->aBlob[i+2]<<16) + (pParse->aBlob[i+3]<<8) + pParse->aBlob[i+4]; n = 5; + }else{ + if( i+8>=pParse->nBlob + || pParse->aBlob[i+1]!=0 + || pParse->aBlob[i+2]!=0 + || pParse->aBlob[i+3]!=0 + || pParse->aBlob[i+4]!=0 + ){ + *pSz = 0; + return 0; + } + sz = (pParse->aBlob[i+5]<<24) + (pParse->aBlob[i+6]<<16) + + (pParse->aBlob[i+7]<<8) + pParse->aBlob[i+8]; + n = 9; } if( i+sz+n > pParse->nBlob && i+sz+n > pParse->nBlob-pParse->delta |