aboutsummaryrefslogtreecommitdiff
path: root/src/json.c
diff options
context:
space:
mode:
authordrh <>2023-04-27 15:11:26 +0000
committerdrh <>2023-04-27 15:11:26 +0000
commitef3a162be6508eae2d09315f6e82d30543367e6d (patch)
treebf048c6ff1882610b179b582038170947161ab97 /src/json.c
parent0d8579120a2d46b75d1564e7d928690fb33ef572 (diff)
downloadsqlite-ef3a162be6508eae2d09315f6e82d30543367e6d.tar.gz
sqlite-ef3a162be6508eae2d09315f6e82d30543367e6d.zip
Allow the labels on JSON objects to be unquoted identifier names.
FossilOrigin-Name: fb428db3f64f148ab9a3478fdcc8b3733e58102b3c8895a482e2551d974d5661
Diffstat (limited to 'src/json.c')
-rw-r--r--src/json.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/json.c b/src/json.c
index 3828ca6bc..178267bdd 100644
--- a/src/json.c
+++ b/src/json.c
@@ -1059,13 +1059,25 @@ json_parse_restart:
if( ++pParse->iDepth > JSON_MAX_DEPTH ) return -1;
x = jsonParseValue(pParse, j);
if( x<=0 ){
- pParse->iDepth--;
if( x==(-2) ){
j = pParse->iErr;
if( pParse->nNode!=(u32)iThis+1 ) pParse->has5 = 1;
+ pParse->iDepth--;
break;
}
- return -1;
+ j += json5Whitespace(&z[j]);
+ if( sqlite3Isalpha(z[j]) || z[j]=='_' || z[j]=='$' ){
+ int k;
+ for(k=j+1; sqlite3Isalnum(z[k]) || z[k]=='_' || z[k]=='$'; k++){}
+ jsonParseAddNode(pParse, JSON_STRING, k-j, &z[j]);
+ if( !pParse->oom ){
+ pParse->aNode[pParse->nNode-1].jnFlags = JNODE_RAW;
+ }
+ pParse->has5 = 1;
+ x = k;
+ }else{
+ return -1;
+ }
}
if( pParse->oom ) return -1;
pNode = &pParse->aNode[pParse->nNode-1];