aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <>2023-12-06 17:39:31 +0000
committerdrh <>2023-12-06 17:39:31 +0000
commitb597fea89436a57b8b4bc39f24dc7e14f5e92dcb (patch)
tree0f284915fe657ccabc5847be0e9b327f1d2d4bc1 /src
parent3207199c98f4b876934dbd4d09615175e43e8b37 (diff)
downloadsqlite-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.c15
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