Changeset: fe1f7f256010 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fe1f7f256010
Added Files:
sql/test/json/Tests/load.sql
Modified Files:
monetdb5/modules/atoms/json.c
sql/test/json/Tests/All
Branch: default
Log Message:
Loading JSON strings test
Causes an unexpected crash in JSONfromString
on freeing
diffs (52 lines):
diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c
--- a/monetdb5/modules/atoms/json.c
+++ b/monetdb5/modules/atoms/json.c
@@ -85,13 +85,10 @@ JSONfromString(str src, int *len, json *
{
ssize_t slen = (ssize_t) strlen(src);
- if ((ssize_t) *len <= slen)
- j = GDKrealloc(*j, slen + 1);
- if ( j == NULL){
- // raise global error
- GDKerror("JSONfromstring failed");
- return 0;
- }
+ if ( *j)
+ GDKfree(j);
+
+ j = GDKstrdup(src);
*len = (int) slen;
if (GDKstrFromStr((unsigned char *) *j, (const unsigned char *) src,
slen) < 0) {
GDKfree(*j);
diff --git a/sql/test/json/Tests/All b/sql/test/json/Tests/All
--- a/sql/test/json/Tests/All
+++ b/sql/test/json/Tests/All
@@ -8,3 +8,4 @@ bulkvalid
coercions
pathexpr
components
+load
diff --git a/sql/test/json/Tests/load.sql b/sql/test/json/Tests/load.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/json/Tests/load.sql
@@ -0,0 +1,18 @@
+-- sample taken from nobench
+
+create table jstmp(j json);
+copy 10 records into jstmp from stdin;
+{"nested_obj": {"num": 4, "str": "GBRDCMBQ"}, "dyn2": true, "dyn1": 9,
"nested_arr": ["especially"], "str2": "GBRDCMBQ", "str1": "GBRDCMBQGE======",
"sparse_093": "GBRDCMBQGE======", "thousandth": 9, "sparse_090":
"GBRDCMBQGE======", "sparse_091": "GBRDCMBQGE======", "sparse_092":
"GBRDCMBQGE======", "num": 9, "bool": true, "sparse_095": "GBRDCMBQGE======",
"sparse_096": "GBRDCMBQGE======", "sparse_097": "GBRDCMBQGE======",
"sparse_098": "GBRDCMBQGE======", "sparse_094": "GBRDCMBQGE======",
"sparse_099": "GBRDCMBQGE======"}
+{"nested_obj": {"num": 2, "str": "GBRDCMA="}, "dyn2": "GBRDCMJR", "dyn1": 7,
"nested_arr": ["its", "for", "if", "he", "questions", "to", "put"], "str2":
"GBRDCMA=", "str1": "GBRDCMJR", "sparse_079": "GBRDCMJR", "thousandth": 7,
"sparse_078": "GBRDCMJR", "num": 7, "bool": true, "sparse_072": "GBRDCMJR",
"sparse_073": "GBRDCMJR", "sparse_070": "GBRDCMJR", "sparse_071": "GBRDCMJR",
"sparse_076": "GBRDCMJR", "sparse_077": "GBRDCMJR", "sparse_074": "GBRDCMJR",
"sparse_075": "GBRDCMJR"}
+{"nested_obj": {"num": 3, "str": "GBRDCMI="}, "dyn2": 8, "dyn1": 8,
"nested_arr": [], "str2": "GBRDCMI=", "str1": "GBRDCMBQGA======", "thousandth":
8, "sparse_087": "GBRDCMBQGA======", "sparse_086": "GBRDCMBQGA======",
"sparse_085": "GBRDCMBQGA======", "num": 8, "bool": false, "sparse_082":
"GBRDCMBQGA======", "sparse_081": "GBRDCMBQGA======", "sparse_080":
"GBRDCMBQGA======", "sparse_083": "GBRDCMBQGA======", "sparse_084":
"GBRDCMBQGA======", "sparse_089": "GBRDCMBQGA======", "sparse_088":
"GBRDCMBQGA======"}
+{"nested_obj": {"num": 0, "str": "GBRDA==="}, "dyn2": 5, "dyn1": 5,
"nested_arr": ["the", "state", "aware", "''", "the"], "str2": "GBRDA===",
"str1": "GBRDCMBR", "sparse_058": "GBRDCMBR", "thousandth": 5, "num": 5,
"bool": true, "sparse_059": "GBRDCMBR", "sparse_054": "GBRDCMBR", "sparse_055":
"GBRDCMBR", "sparse_056": "GBRDCMBR", "sparse_057": "GBRDCMBR", "sparse_050":
"GBRDCMBR", "sparse_051": "GBRDCMBR", "sparse_052": "GBRDCMBR", "sparse_053":
"GBRDCMBR"}
+{"nested_obj": {"num": 8, "str": "GBRDCMBQGA======"}, "sparse_035":
"GBRDCMI=", "dyn2": true, "dyn1": 3, "nested_arr": ["check", "it", "the"],
"str2": "GBRDCMBQGA======", "str1": "GBRDCMI=", "thousandth": 3, "sparse_036":
"GBRDCMI=", "sparse_037": "GBRDCMI=", "sparse_034": "GBRDCMI=", "num": 3,
"bool": true, "sparse_033": "GBRDCMI=", "sparse_030": "GBRDCMI=", "sparse_031":
"GBRDCMI=", "sparse_032": "GBRDCMI=", "sparse_038": "GBRDCMI=", "sparse_039":
"GBRDCMI="}
+{"nested_obj": {"num": 9, "str": "GBRDCMBQGE======"}, "sparse_040":
"GBRDCMBQ", "dyn2": "GBRDCMBQ", "dyn1": 4, "nested_arr": ["potatoes", "a",
"to", "authentic"], "str2": "GBRDCMBQGE======", "str1": "GBRDCMBQ",
"thousandth": 4, "sparse_043": "GBRDCMBQ", "sparse_042": "GBRDCMBQ",
"sparse_041": "GBRDCMBQ", "num": 4, "bool": false, "sparse_046": "GBRDCMBQ",
"sparse_045": "GBRDCMBQ", "sparse_044": "GBRDCMBQ", "sparse_047": "GBRDCMBQ",
"sparse_049": "GBRDCMBQ", "sparse_048": "GBRDCMBQ"}
+{"sparse_018": "GBRDC===", "nested_obj": {"num": 6, "str": "GBRDCMJQ"},
"dyn2": "GBRDC===", "dyn1": 1, "nested_arr": ["button-down"], "sparse_010":
"GBRDC===", "str2": "GBRDCMJQ", "str1": "GBRDC===", "sparse_013": "GBRDC===",
"sparse_014": "GBRDC===", "sparse_015": "GBRDC===", "sparse_016": "GBRDC===",
"sparse_017": "GBRDC===", "num": 1, "bool": true, "sparse_011": "GBRDC===",
"thousandth": 1, "sparse_019": "GBRDC===", "sparse_012": "GBRDC==="}
+{"nested_obj": {"num": 7, "str": "GBRDCMJR"}, "dyn2": 2, "dyn1": 2,
"nested_arr": ["she", "beyond"], "str2": "GBRDCMJR", "str1": "GBRDCMA=",
"thousandth": 2, "sparse_025": "GBRDCMA=", "sparse_024": "GBRDCMA=",
"sparse_027": "GBRDCMA=", "num": 2, "bool": false, "sparse_020": "GBRDCMA=",
"sparse_023": "GBRDCMA=", "sparse_022": "GBRDCMA=", "sparse_021": "GBRDCMA=",
"sparse_029": "GBRDCMA=", "sparse_028": "GBRDCMA=", "sparse_026": "GBRDCMA="}
+{"nested_obj": {"num": 5, "str": "GBRDCMBR"}, "sparse_008": "GBRDA===",
"sparse_009": "GBRDA===", "dyn2": false, "dyn1": "GBRDA===", "nested_arr": [],
"sparse_007": "GBRDA===", "str2": "GBRDCMBR", "str1": "GBRDA===", "sparse_004":
"GBRDA===", "sparse_003": "GBRDA===", "sparse_002": "GBRDA===", "sparse_001":
"GBRDA===", "sparse_000": "GBRDA===", "num": 0, "bool": false, "sparse_006":
"GBRDA===", "thousandth": 0, "sparse_005": "GBRDA==="}
+{"nested_obj": {"num": 1, "str": "GBRDC==="}, "dyn2": false, "dyn1": 6,
"nested_arr": ["to", "interrupted", "some", "daily", "has", "averages"],
"str2": "GBRDC===", "str1": "GBRDCMJQ", "thousandth": 6, "sparse_069":
"GBRDCMJQ", "sparse_068": "GBRDCMJQ", "num": 6, "bool": false, "sparse_061":
"GBRDCMJQ", "sparse_060": "GBRDCMJQ", "sparse_063": "GBRDCMJQ", "sparse_062":
"GBRDCMJQ", "sparse_065": "GBRDCMJQ", "sparse_064": "GBRDCMJQ", "sparse_067":
"GBRDCMJQ", "sparse_066": "GBRDCMJQ"}
+
+select json.filter(j,"..num") from jstmp;
+
+drop table jstmp;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list