From 98dbfa69d3c17c1d2e742e37a730679ec51a26be Mon Sep 17 00:00:00 2001 From: drh <> Date: Fri, 6 Oct 2023 15:35:42 +0000 Subject: Fixes to rendering JSON5 extensions encoded as JSONB. FossilOrigin-Name: 5a17e4479aad2d8313170e5de83a1c52f30b55d9d4fb776024fa6622e175c63b --- src/json.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'src/json.c') diff --git a/src/json.c b/src/json.c index b2053af9e..25ef372d8 100644 --- a/src/json.c +++ b/src/json.c @@ -3308,15 +3308,16 @@ static u32 jsonRenderBlob( case JSONB_TEXT5: { const char *zIn; u32 k; + u32 sz2 = sz; zIn = (const char*)&pParse->aBlob[i+n]; jsonAppendChar(pOut, '"'); - while( sz>0 ){ - for(k=0; k0 ){ + for(k=0; k0 ){ jsonAppendRawNZ(pOut, zIn, k); zIn += k; - sz -= k; - if( sz==0 ) break; + sz2 -= k; + if( sz2==0 ) break; } assert( zIn[0]=='\\' ); switch( (u8)zIn[1] ){ @@ -3330,7 +3331,7 @@ static u32 jsonRenderBlob( jsonAppendRawNZ(pOut, "\\u00", 4); jsonAppendRawNZ(pOut, &zIn[2], 2); zIn += 2; - sz -= 2; + sz2 -= 2; break; case '0': jsonAppendRawNZ(pOut, "\\u0000", 6); @@ -3338,24 +3339,24 @@ static u32 jsonRenderBlob( case '\r': if( zIn[2]=='\n' ){ zIn++; - sz--; + sz2--; } break; case '\n': break; case 0xe2: - assert( sz>=4 ); + assert( sz2>=4 ); assert( 0x80==(u8)zIn[2] ); assert( 0xa8==(u8)zIn[3] || 0xa9==(u8)zIn[3] ); zIn += 2; - sz -= 2; + sz2 -= 2; break; default: jsonAppendRawNZ(pOut, zIn, 2); break; } zIn += 2; - sz -= 2; + sz2 -= 2; } jsonAppendChar(pOut, '"'); break; @@ -3387,6 +3388,7 @@ static u32 jsonRenderBlob( } default: { + pOut->eErr |= JSTRING_MALFORMED; break; } } -- cgit v1.2.3