1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-08 14:02:16 +03:00

Enhancements to ext/misc/randomjson.c.

FossilOrigin-Name: a4e6d1f86f3a502e4170f5a90031e269e48363e95114a66b84d373e3ce0b2704
This commit is contained in:
drh
2023-12-18 12:18:47 +00:00
parent 0d201598a5
commit 2ae95649de
3 changed files with 45 additions and 16 deletions

View File

@@ -26,6 +26,7 @@
** **
** .load ./randomjson ** .load ./randomjson
** SELECT random_json(1); ** SELECT random_json(1);
** SELECT random_json5(1);
*/ */
#ifdef SQLITE_STATIC_RANDOMJSON #ifdef SQLITE_STATIC_RANDOMJSON
# include "sqlite3.h" # include "sqlite3.h"
@@ -55,17 +56,18 @@ static unsigned int prngInt(Prng *p){
return p->x ^ p->y; return p->x ^ p->y;
} }
static const char *azJsonAtoms[] = { static char *azJsonAtoms[] = {
/* JSON JSON-5 */ /* JSON JSON-5 */
"0", "0", "0", "0",
"1", "1", "1", "1",
"-1", "-1", "-1", "-1",
"2", "+2", "2", "+2",
"3", "3", "3DDDD", "3DDDD",
"2.5", "2.5", "2.5DD", "2.5DD",
"0.75", ".75", "0.75", ".75",
"-4.0e2", "-4.e2", "-4.0e2", "-4.e2",
"5.0e-3", "+5e-3", "5.0e-3", "+5e-3",
"6.DDe+0DD", "6.DDe+0DD",
"0", "0x0", "0", "0x0",
"512", "0x200", "512", "0x200",
"256", "+0x100", "256", "+0x100",
@@ -77,12 +79,14 @@ static const char *azJsonAtoms[] = {
"-9.0e999", "-Infinity", "-9.0e999", "-Infinity",
"9.0e999", "+Infinity", "9.0e999", "+Infinity",
"null", "NaN", "null", "NaN",
"-0.0005123", "-0.0005123", "-0.0005DD", "-0.0005DD",
"4.35e-3", "+4.35e-3", "4.35e-3", "+4.35e-3",
"\"gem\\\"hay\"", "\"gem\\\"hay\"", "\"gem\\\"hay\"", "\"gem\\\"hay\"",
"\"icy'joy\"", "'icy\\'joy\'", "\"icy'joy\"", "'icy\\'joy\'",
"\"keylog\"", "\"key\\\nlog\"", "\"keylog\"", "\"key\\\nlog\"",
"\"mix\\\\\\tnet\"", "\"mix\\\\\\tnet\"", "\"mix\\\\\\tnet\"", "\"mix\\\\\\tnet\"",
"\"oat\\r\\n\"", "\"oat\\r\\n\"",
"\"\\fpan\\b\"", "\"\\fpan\\b\"",
"{}", "{}", "{}", "{}",
"[]", "[]", "[]", "[]",
"[]", "[/*empty*/]", "[]", "[/*empty*/]",
@@ -93,19 +97,21 @@ static const char *azJsonAtoms[] = {
"\"day\"", "\"day\"", "\"day\"", "\"day\"",
"\"end\"", "'end'", "\"end\"", "'end'",
"\"fly\"", "\"fly\"", "\"fly\"", "\"fly\"",
"\"\\u00XX\\u00XX\"", "\"\\xXX\\xXX\"",
"\"y\\uXXXXz\"", "\"y\\uXXXXz\"",
"\"\"", "\"\"", "\"\"", "\"\"",
}; };
static const char *azJsonTemplate[] = { static char *azJsonTemplate[] = {
/* JSON JSON-5 */ /* 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\":%,\"e\":%}", "{a:%,b:%,c:%,d:%,e:%}",
"{\"a\":%,\"b\":%,\"c\":%,\"d\":%,\"\":%}", "{a:%,b:%,c:%,d:%,'':%}", "{\"a\":%,\"b\":%,\"c\":%,\"d\":%,\"\":%}", "{a:%,b:%,c:%,d:%,'':%}",
"{\"d\":%}", "{d:%}", "{\"d\":%}", "{d:%}",
"{\"eeee\":%, \"ffff\":%}", "{eeee:% /*and*/, ffff:%}", "{\"eeee\":%, \"ffff\":%}", "{eeee:% /*and*/, ffff:%}",
"{\"$g\":%,\"_h_\":%}", "{$g:%,_h_:%,}", "{\"$g\":%,\"_h_\":%}", "{$g:%,_h_:%,}",
"{\"x\":%,\n \"y\":%}", "{\"x\":%,\n \"y\":%}", "{\"x\":%,\n \"y\":%}", "{\"x\":%,\n \"y\":%}",
"{\"a b c d\":%,\"e\":%,\"f\":%,\"\\u0078\":%,\"y\":%}", "{\"a b c d\":%,\"\\u00XX\":%,\"\\uXXXX\":%,\"x\":%,\"y\":%}",
"{\"a b c d\":%,\"\\x65\":%,\"\\u0066\":%,x:%,y:%}", "{\"a b c d\":%,\"\\xXX\":%,\"\\uXXXX\":%,x:%,y:%}",
"{\"Z\":%}", "{Z:%,}", "{\"Z\":%}", "{Z:%,}",
"[%]", "[%,]", "[%]", "[%,]",
"[%,%]", "[%,%]", "[%,%]", "[%,%]",
@@ -126,8 +132,10 @@ static void jsonExpand(
unsigned int r /* Growth probability 0..1000. 0 means no growth */ unsigned int r /* Growth probability 0..1000. 0 means no growth */
){ ){
unsigned int i, j, k; unsigned int i, j, k;
const char *z; char *z;
char *zX;
size_t n; size_t n;
char zBuf[200];
j = 0; j = 0;
if( zSrc==0 ){ if( zSrc==0 ){
@@ -153,6 +161,27 @@ static void jsonExpand(
z = azJsonTemplate[k]; z = azJsonTemplate[k];
} }
n = strlen(z); 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 ){ if( j+n<STRSZ ){
memcpy(&zDest[j], z, n); memcpy(&zDest[j], z, n);
j += (int)n; j += (int)n;

View File

@@ -1,5 +1,5 @@
C Enhancements\sto\sthe\s"randomjson.c"\sextension.\s\sAutomatically\sload\sthat\sextension\ninto\sfuzzcheck. C Enhancements\sto\sext/misc/randomjson.c.
D 2023-12-17T20:41:48.102 D 2023-12-18T12:18:47.579
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -394,7 +394,7 @@ F ext/misc/pcachetrace.c f4227ce03fb16aa8d6f321b72dd051097419d7a028a9853af048bee
F ext/misc/percentile.c b9086e223d583bdaf8cb73c98a6539d501a2fc4282654adbfea576453d82e691 F ext/misc/percentile.c b9086e223d583bdaf8cb73c98a6539d501a2fc4282654adbfea576453d82e691
F ext/misc/prefixes.c 82645f79229877afab08c8b08ca1e7fa31921280906b90a61c294e4f540cd2a6 F ext/misc/prefixes.c 82645f79229877afab08c8b08ca1e7fa31921280906b90a61c294e4f540cd2a6
F ext/misc/qpvtab.c fc189e127f68f791af90a487f4460ec91539a716daf45a0c357e963fd47cc06c 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/regexp.c 4bdd0045912f81c84908bd535ec5ad3b1c8540b4287c70ab84070963624047db
F ext/misc/remember.c add730f0f7e7436cd15ea3fd6a90fd83c3f706ab44169f7f048438b7d6baa69c F ext/misc/remember.c add730f0f7e7436cd15ea3fd6a90fd83c3f706ab44169f7f048438b7d6baa69c
F ext/misc/rot13.c 51ac5f51e9d5fd811db58a9c23c628ad5f333c173f1fc53c8491a3603d38556c 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.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P 5a0c517ed7e46c0f8a3db752cf5b9f8010c60f35084606abe9e7c1c4f993b4a7 P 70620405ab01d6a5d38bafa9ae175fd6e4eabaf2efb7854734278dafd7b05c99
R 27bdbb5e6b8c49c050a6d99d378352e9 R fef455adeb3db15e87f82c26ab2a315d
U drh U drh
Z 29254a4879856a31ff801b293e61b91e Z 8e07af0f91951d15e8de4bbc66cf6fcc
# Remove this line to create a well-formed Fossil manifest. # Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
70620405ab01d6a5d38bafa9ae175fd6e4eabaf2efb7854734278dafd7b05c99 a4e6d1f86f3a502e4170f5a90031e269e48363e95114a66b84d373e3ce0b2704