]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Enhancements to ext/misc/randomjson.c.
authordrh <>
Mon, 18 Dec 2023 12:18:47 +0000 (12:18 +0000)
committerdrh <>
Mon, 18 Dec 2023 12:18:47 +0000 (12:18 +0000)
FossilOrigin-Name: a4e6d1f86f3a502e4170f5a90031e269e48363e95114a66b84d373e3ce0b2704

ext/misc/randomjson.c
manifest
manifest.uuid

index a44905ca88ea071c754510180ce00ccccecf08e1..d64eb693273b6e279afe4694543ad2e2a18cc91c 100644 (file)
@@ -26,6 +26,7 @@
 **
 **     .load ./randomjson
 **     SELECT random_json(1);
+**     SELECT random_json5(1);
 */
 #ifdef SQLITE_STATIC_RANDOMJSON
 #  include "sqlite3.h"
@@ -55,17 +56,18 @@ static unsigned int prngInt(Prng *p){
   return p->x ^ p->y;
 }
 
-static const char *azJsonAtoms[] = {
+static char *azJsonAtoms[] = {
   /* JSON                    JSON-5 */
   "0",                       "0",
   "1",                       "1",
   "-1",                      "-1",
   "2",                       "+2",
-  "3",                       "3",
-  "2.5",                     "2.5",
+  "3DDDD",                   "3DDDD",
+  "2.5DD",                   "2.5DD",
   "0.75",                    ".75",
   "-4.0e2",                  "-4.e2",
   "5.0e-3",                  "+5e-3",
+  "6.DDe+0DD",                "6.DDe+0DD",
   "0",                       "0x0",
   "512",                     "0x200",
   "256",                     "+0x100",
@@ -77,12 +79,14 @@ static const char *azJsonAtoms[] = {
   "-9.0e999",                "-Infinity",
   "9.0e999",                 "+Infinity",
   "null",                    "NaN",
-  "-0.0005123",              "-0.0005123",
+  "-0.0005DD",              "-0.0005DD",
   "4.35e-3",                 "+4.35e-3",
   "\"gem\\\"hay\"",          "\"gem\\\"hay\"",
   "\"icy'joy\"",             "'icy\\'joy\'",
   "\"keylog\"",              "\"key\\\nlog\"",
   "\"mix\\\\\\tnet\"",       "\"mix\\\\\\tnet\"",
+  "\"oat\\r\\n\"",           "\"oat\\r\\n\"",
+  "\"\\fpan\\b\"",           "\"\\fpan\\b\"",
   "{}",                      "{}",
   "[]",                      "[]",
   "[]",                      "[/*empty*/]",
@@ -93,19 +97,21 @@ static const char *azJsonAtoms[] = {
   "\"day\"",                 "\"day\"",
   "\"end\"",                 "'end'",
   "\"fly\"",                 "\"fly\"",
+  "\"\\u00XX\\u00XX\"",      "\"\\xXX\\xXX\"",
+  "\"y\\uXXXXz\"",           "\"y\\uXXXXz\"",
   "\"\"",                    "\"\"",
 };
-static const char *azJsonTemplate[] = {
+static char *azJsonTemplate[] = {
   /* JSON                                      JSON-5 */
-  "{\"a\":%,\"b\":%,\"c\":%}",                 "{a:%,b:%,c:%}",
+  "{\"a\":%,\"b\":%,\"cDD\":%}",               "{a:%,b:%,cDD:%}",
   "{\"a\":%,\"b\":%,\"c\":%,\"d\":%,\"e\":%}", "{a:%,b:%,c:%,d:%,e:%}",
   "{\"a\":%,\"b\":%,\"c\":%,\"d\":%,\"\":%}",  "{a:%,b:%,c:%,d:%,'':%}",
   "{\"d\":%}",                                 "{d:%}",
   "{\"eeee\":%, \"ffff\":%}",                  "{eeee:% /*and*/, ffff:%}",
   "{\"$g\":%,\"_h_\":%}",                      "{$g:%,_h_:%,}",
   "{\"x\":%,\n  \"y\":%}",                     "{\"x\":%,\n  \"y\":%}",
-  "{\"a b c d\":%,\"e\":%,\"f\":%,\"\\u0078\":%,\"y\":%}",
-            "{\"a b c d\":%,\"\\x65\":%,\"\\u0066\":%,x:%,y:%}",
+  "{\"a b c d\":%,\"\\u00XX\":%,\"\\uXXXX\":%,\"x\":%,\"y\":%}",
+            "{\"a b c d\":%,\"\\xXX\":%,\"\\uXXXX\":%,x:%,y:%}",
   "{\"Z\":%}",                                 "{Z:%,}",
   "[%]",                                       "[%,]",
   "[%,%]",                                     "[%,%]",
@@ -126,8 +132,10 @@ static void jsonExpand(
   unsigned int r        /* Growth probability 0..1000.  0 means no growth */
 ){
   unsigned int i, j, k;
-  const char *z;
+  char *z;
+  char *zX;
   size_t n;
+  char zBuf[200];
 
   j = 0;
   if( zSrc==0 ){
@@ -153,6 +161,27 @@ static void jsonExpand(
       z = azJsonTemplate[k];
     }
     n = strlen(z);
+    if( (zX = strstr(z,"XX"))!=0 ){
+      unsigned int r = prngInt(p);
+      memcpy(zBuf, z, n+1);
+      z = zBuf;
+      zX = strstr(z,"XX");
+      while( zX!=0 ){
+        zX[0] = "0123456789abcdef"[r%16];  r /= 16;
+        zX[1] = "0123456789abcdef"[r%16];  r /= 16;
+        zX = strstr(zX, "XX");
+      }
+    }else if( (zX = strstr(z,"DD"))!=0 ){
+      unsigned int r = prngInt(p);
+      memcpy(zBuf, z, n+1);
+      z = zBuf;
+      zX = strstr(z,"DD");
+      while( zX!=0 ){
+        zX[0] = "0123456789"[r%10];  r /= 10;
+        zX[1] = "0123456789"[r%10];  r /= 10;
+        zX = strstr(zX, "DD");
+      }
+    }
     if( j+n<STRSZ ){
       memcpy(&zDest[j], z, n);
       j += (int)n;
index 3a32d2c40db7890fea76c0144ef9471fe221f5fe..707ec351dcb6b42ad2d492cb43312ab72c11657e 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Enhancements\sto\sthe\s"randomjson.c"\sextension.\s\sAutomatically\sload\sthat\sextension\ninto\sfuzzcheck.
-D 2023-12-17T20:41:48.102
+C Enhancements\sto\sext/misc/randomjson.c.
+D 2023-12-18T12:18:47.579
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -394,7 +394,7 @@ F ext/misc/pcachetrace.c f4227ce03fb16aa8d6f321b72dd051097419d7a028a9853af048bee
 F ext/misc/percentile.c b9086e223d583bdaf8cb73c98a6539d501a2fc4282654adbfea576453d82e691
 F ext/misc/prefixes.c 82645f79229877afab08c8b08ca1e7fa31921280906b90a61c294e4f540cd2a6
 F ext/misc/qpvtab.c fc189e127f68f791af90a487f4460ec91539a716daf45a0c357e963fd47cc06c
-F ext/misc/randomjson.c 0f467aa92dfec7d8bb100747f44e57e5549ab568bc7729eafc17ef96bf25589f
+F ext/misc/randomjson.c 5cc576ac9d246912ca5617c30c032d71a314f909e79b77720b92a110af5a143e
 F ext/misc/regexp.c 4bdd0045912f81c84908bd535ec5ad3b1c8540b4287c70ab84070963624047db
 F ext/misc/remember.c add730f0f7e7436cd15ea3fd6a90fd83c3f706ab44169f7f048438b7d6baa69c
 F ext/misc/rot13.c 51ac5f51e9d5fd811db58a9c23c628ad5f333c173f1fc53c8491a3603d38556c
@@ -2154,8 +2154,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 5a0c517ed7e46c0f8a3db752cf5b9f8010c60f35084606abe9e7c1c4f993b4a7
-R 27bdbb5e6b8c49c050a6d99d378352e9
+P 70620405ab01d6a5d38bafa9ae175fd6e4eabaf2efb7854734278dafd7b05c99
+R fef455adeb3db15e87f82c26ab2a315d
 U drh
-Z 29254a4879856a31ff801b293e61b91e
+Z 8e07af0f91951d15e8de4bbc66cf6fcc
 # Remove this line to create a well-formed Fossil manifest.
index 09fdefa9efaf78e22e6640b38966ac0c643605fb..af4ff6ee3b5693bbce559ea96a8a2f4708cfb49b 100644 (file)
@@ -1 +1 @@
-70620405ab01d6a5d38bafa9ae175fd6e4eabaf2efb7854734278dafd7b05c99
\ No newline at end of file
+a4e6d1f86f3a502e4170f5a90031e269e48363e95114a66b84d373e3ce0b2704
\ No newline at end of file