diff --git a/ext/misc/json1.c b/ext/misc/json1.c index 486eaa4285..60a34539a0 100644 --- a/ext/misc/json1.c +++ b/ext/misc/json1.c @@ -801,7 +801,10 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ j = i+1; for(;;){ c = z[j]; - if( c<=0x1f ) return -1; /* Control characters not allowed in strings */ + if( (c & ~0x1f)==0 ){ + /* Control characters are not allowed in strings */ + return -1; + } if( c=='\\' ){ c = z[++j]; if( c=='"' || c=='\\' || c=='/' || c=='b' || c=='f' diff --git a/manifest b/manifest index 59900f1e3b..9c3017b58b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\sfts5\sto\ssupport\s"\s:\s(\s\s)"\sfor\scolumn\sfiltering,\sas\swell\nas\s"\s:\sNEAR(...)"\sand\s"\s:\s". -D 2017-04-12T17:50:12.869 +C Fix\sa\sregression\scaused\sby\sthe\sfix\sfor\sticket\s[6c9b5514077fed34551f98e64c09a1]\s-\ncontrol\scharacters\sallowed\sin\sJSON. +D 2017-04-13T00:12:32.332 F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc a4c0613a18663bda56d8cf76079ab6590a7c3602e54befb4bbdef76bcaa38b6a @@ -218,7 +218,7 @@ F ext/misc/eval.c f971962e92ebb8b0a4e6b62949463ee454d88fa2 F ext/misc/fileio.c d4171c815d6543a9edef8308aab2951413cd8d0f F ext/misc/fuzzer.c 7c64b8197bb77b7d64eff7cac7848870235d4c25 F ext/misc/ieee754.c f190d0cc5182529acb15babd177781be1ac1718c -F ext/misc/json1.c 18d80526c34e3eab8adf6a86f7e45b873c19b33d341e76993590a3fca9aefa14 +F ext/misc/json1.c e54799e85461fc7d5456194f110bb967775949a4813d007f94c121284304cb1d F ext/misc/memvfs.c e5225bc22e79dde6b28380f3a068ddf600683a33 F ext/misc/nextchar.c 35c8b8baacb96d92abbb34a83a997b797075b342 F ext/misc/percentile.c 92699c8cd7d517ff610e6037e56506f8904dae2e @@ -911,7 +911,7 @@ F test/journal3.test ff8af941f9e06161d3db1b46bb9f965ff0e7f307 F test/jrnlmode.test 7864d59cf7f6e552b9b99ba0f38acd167edc10fa F test/jrnlmode2.test 81610545a4e6ed239ea8fa661891893385e23a1d F test/jrnlmode3.test 556b447a05be0e0963f4311e95ab1632b11c9eaa -F test/json101.test 9e68ac5c7cb3fabe22677d919ca025f80f27dde37f4e760b43f9720179ee466c +F test/json101.test 2bd3703a8566e39f8efee8b83bb60aac363fa312e69c94b4024114e0fe77e380 F test/json102.test eeb54efa221e50b74a2d6fb9259963b48d7414dca3ce2fdfdeed45cb28487bc1 F test/json103.test c5f6b85e69de05f6b3195f9f9d5ce9cd179099a0 F test/json104.test 877d5845f6303899b7889ea5dd1bea99076e3100574d5c536082245c5805dcaa @@ -1571,7 +1571,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P f2643315bb41a71eebd79f5d671f9163187e299a52ff8a481186f1e8fa7e5262 -R 0002da416f4fbc93cd5fcd1248781e80 -U dan -Z 28e57cabc052d8f141d26e29a9907759 +P c847543f8bb1376fef52bca72b4191162a32eb7e6c5f0cd1aa0ab116b3183396 +R 0115b666e9627edf0663b399afd00fa5 +U drh +Z d4923dfb1fc052664f2f0021f04650c5 diff --git a/manifest.uuid b/manifest.uuid index 17ea2da68c..90be1e70ef 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c847543f8bb1376fef52bca72b4191162a32eb7e6c5f0cd1aa0ab116b3183396 \ No newline at end of file +8e7b611863247a3bf46a96ec4b47d24c0ae0d60c9cee968a1cfd1da157e7c9bb \ No newline at end of file diff --git a/test/json101.test b/test/json101.test index e7dc8888c8..7b0292ad03 100644 --- a/test/json101.test +++ b/test/json101.test @@ -356,6 +356,15 @@ do_execsql_test json-8.2 { SELECT a=json_extract(b,'$[0]') FROM t8; } {1} +# 2017-04-12. Regression reported on the mailing list by Rolf Ade +# +do_execsql_test json-8.3 { + SELECT json_valid(char(0x22,0xe4,0x22)); +} {1} +do_execsql_test json-8.4 { + SELECT unicode(json_extract(char(0x22,228,0x22),'$')); +} {228} + # The json_quote() function transforms an SQL value into a JSON value. # String values are quoted and interior quotes are escaped. NULL values # are rendered as the unquoted string "null".