]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
JSON5 bug fix: Escape double-quotes that occur inside of single-quoted strings.
authordrh <>
Thu, 9 Nov 2023 01:54:26 +0000 (01:54 +0000)
committerdrh <>
Thu, 9 Nov 2023 01:54:26 +0000 (01:54 +0000)
[forum:/forumpost/ddcad3e884|Forum post ddcad3e884].

FossilOrigin-Name: 1c98d46d60ef1494bd8b7561c7d0cd5aafc178201a6f1f0da25dea6140b91cd0

manifest
manifest.uuid
src/json.c
test/json501.test

index d580ab0fb8326e021c51c429ba8ed7cddba69305..6414fd487b73ac5486ffbbd1f5a3d75b2a787d14 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C More\sprecise\scharacterization\sof\sJSON\sfunctions.\s\sIndicate\swhen\sfunctions\smight\nreturn\sJSON\s(subtype\s'J')\sand\swhen\sthey\smake\suse\sof\sthe\sfunction\sargument\scache.
-D 2023-11-08T16:37:12.211
+C JSON5\sbug\sfix:\s\sEscape\sdouble-quotes\sthat\soccur\sinside\sof\ssingle-quoted\sstrings.\n[forum:/forumpost/ddcad3e884|Forum\spost\sddcad3e884].
+D 2023-11-09T01:54:26.529
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -684,7 +684,7 @@ F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
 F src/hwtime.h f9c2dfb84dce7acf95ce6d289e46f5f9d3d1afd328e53da8f8e9008e3b3caae6
 F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
 F src/insert.c 3f0a94082d978bbdd33c38fefea15346c6c6bffb70bc645a71dc0f1f87dd3276
-F src/json.c 82d1237899d5d06dc9722f9a0d9305711ff563c68221b479f0788b33cb114e16
+F src/json.c 78559ef0eb3929c693ee2cd69fe5187fba8b123edb97cbd1c6a8dcd0589310ac
 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
 F src/loadext.c 7432c944ff197046d67a1207790a1b13eec4548c85a9457eb0896bb3641dfb36
 F src/main.c e1bc8864834697503d370d94613be945d05ca1c5ebdda43e7d5c8ee8c48d433c
@@ -1325,7 +1325,7 @@ F test/json102.test 4c69694773a470f1fda34e5f4ba24920b35184fb66050b450fc2ef9ab5ad
 F test/json103.test 53df87f83a4e5fa0c0a56eb29ff6c94055c6eb919f33316d62161a8880112dbe
 F test/json104.test 1b844a70cddcfa2e4cd81a5db0657b2e61e7f00868310f24f56a9ba0114348c1
 F test/json105.test 11670a4387f4308ae0318cadcbd6a918ea7edcd19fbafde020720a073952675d
-F test/json501.test f71710f60fa45b19dc336fbaac9e8362f70f80cf81badefdb845ed3f7c7c2ccc
+F test/json501.test c419deb835b70c1a2c8532936927bcc1146730328edd2052276715bfd209724d
 F test/json502.test 98c38e3c4573841028a1381dfb81d4c3f9b105d39668167da10d055e503f6d0b
 F test/keyword1.test 37ef6bba5d2ed5b07ecdd6810571de2956599dff
 F test/kvtest.c 6e0228409ea7ca0497dad503fbd109badb5e59545d131014b6aaac68b56f484a
@@ -2139,8 +2139,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 3978c084a509c3c739fbe87e20feec9ddf1325e35170329987af197ca9fd731a
-R 2a4b96e0d45f1ec3b63228c066f1d6da
+P b2b62546c4a5e9dccb8aa0cb8eda228d662c69159e320b01a377317bc909e89f
+R bc8e127289d5f1279e134e74ad50d503
 U drh
-Z 7680e031e38ed1a9d942d233bb859fec
+Z 7d193c1105cecb8c78a50905b1669eb7
 # Remove this line to create a well-formed Fossil manifest.
index 8ca67c6ccf5248395956d221490b5bcda31e1f6e..17aa7a9f38cc3f3cecea693c02f66372f73d4a2d 100644 (file)
@@ -1 +1 @@
-b2b62546c4a5e9dccb8aa0cb8eda228d662c69159e320b01a377317bc909e89f
\ No newline at end of file
+1c98d46d60ef1494bd8b7561c7d0cd5aafc178201a6f1f0da25dea6140b91cd0
\ No newline at end of file
index 407ca2d0eb87d70584b90354b14f493b76e19df8..91b96df376446420102004809777c3ed72a16064 100644 (file)
@@ -432,13 +432,19 @@ static void jsonAppendNormalizedString(JsonString *p, const char *zIn, u32 N){
   zIn++;
   N -= 2;
   while( N>0 ){
-    for(i=0; i<N && zIn[i]!='\\'; i++){}
+    for(i=0; i<N && zIn[i]!='\\' && zIn[i]!='"'; i++){}
     if( i>0 ){
       jsonAppendRawNZ(p, zIn, i);
       zIn += i;
       N -= i;
       if( N==0 ) break;
     }
+    if( zIn[0]=='"' ){
+      jsonAppendRawNZ(p, "\\\"", 2);
+      zIn++;
+      N--;
+      continue;
+    }
     assert( zIn[0]=='\\' );
     switch( (u8)zIn[1] ){
       case '\'':
index a37326973abab3b1565a82725fdf9fe1e4666874..3318eea7f2bc0b7a95e578f4a6d1de690fe64694 100644 (file)
@@ -300,5 +300,10 @@ do_execsql_test 12.4 {
           || ' "xyz"}')->>'a';
 } xyz
 
+# 2023-11-08 forum/forumpost/ddcad3e884
+#
+do_execsql_test 13.1 {
+  SELECT json('{x:''a "b" c''}');
+} {{{"x":"a \"b\" c"}}}
 
 finish_test