aboutsummaryrefslogtreecommitdiffstats
path: root/libtests
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-05-20 02:28:13 +0200
committerJay Berkenbilt <ejb@ql.org>2022-05-20 15:16:25 +0200
commit6c7326b290462372bb6c23462b2087149cf5fcc6 (patch)
tree1d741cd13b60956551099c0c6b70834bd1f7f4b3 /libtests
parent1ec561daa493713ab83057c6a18383947f56c451 (diff)
downloadqpdf-6c7326b290462372bb6c23462b2087149cf5fcc6.tar.zst
JSON fix: correctly parse UTF-16 surrogate pairs
Diffstat (limited to 'libtests')
-rw-r--r--libtests/libtests.testcov3
-rw-r--r--libtests/qtest/json_parse.test5
-rw-r--r--libtests/qtest/json_parse/bad-37.json1
-rw-r--r--libtests/qtest/json_parse/bad-37.out1
-rw-r--r--libtests/qtest/json_parse/bad-38.json1
-rw-r--r--libtests/qtest/json_parse/bad-38.out1
-rw-r--r--libtests/qtest/json_parse/bad-39.json1
-rw-r--r--libtests/qtest/json_parse/bad-39.out1
-rw-r--r--libtests/qtest/json_parse/good-11-react.out16
-rw-r--r--libtests/qtest/json_parse/good-11.json4
-rw-r--r--libtests/qtest/json_parse/save-11.json13
11 files changed, 46 insertions, 1 deletions
diff --git a/libtests/libtests.testcov b/libtests/libtests.testcov
index 3e4d63d0..1f006e81 100644
--- a/libtests/libtests.testcov
+++ b/libtests/libtests.testcov
@@ -89,3 +89,6 @@ JSONHandler unhandled value 0
JSONHandler unexpected key 0
JSON schema other type 0
JSON optional key 0
+JSON 16 high high 0
+JSON 16 low not after high 0
+JSON 16 dangling high 0
diff --git a/libtests/qtest/json_parse.test b/libtests/qtest/json_parse.test
index 15b251cc..6d57e92c 100644
--- a/libtests/qtest/json_parse.test
+++ b/libtests/qtest/json_parse.test
@@ -32,7 +32,7 @@ if ($^O ne 'msys')
cleanup();
-my $good = 10;
+my $good = 11;
for (my $i = 1; $i <= $good; ++$i)
{
@@ -117,6 +117,9 @@ my @bad = (
"premature end after u", # 34
"bad hex digit", # 35
"parser depth exceeded", # 36
+ "stray low surrogate", # 37
+ "high high surrogate", # 38
+ "dangling high surrogate", # 39
);
my $i = 0;
diff --git a/libtests/qtest/json_parse/bad-37.json b/libtests/qtest/json_parse/bad-37.json
new file mode 100644
index 00000000..3fd031aa
--- /dev/null
+++ b/libtests/qtest/json_parse/bad-37.json
@@ -0,0 +1 @@
+[1, "u:potato: \udd54", 2]
diff --git a/libtests/qtest/json_parse/bad-37.out b/libtests/qtest/json_parse/bad-37.out
new file mode 100644
index 00000000..8b811a34
--- /dev/null
+++ b/libtests/qtest/json_parse/bad-37.out
@@ -0,0 +1 @@
+exception: bad-37.json: JSON: offset 15: UTF-16 low surrogate found not immediately after high surrogate
diff --git a/libtests/qtest/json_parse/bad-38.json b/libtests/qtest/json_parse/bad-38.json
new file mode 100644
index 00000000..78444f98
--- /dev/null
+++ b/libtests/qtest/json_parse/bad-38.json
@@ -0,0 +1 @@
+"u:\ud83ezz\ud83ezz"
diff --git a/libtests/qtest/json_parse/bad-38.out b/libtests/qtest/json_parse/bad-38.out
new file mode 100644
index 00000000..1b4461f1
--- /dev/null
+++ b/libtests/qtest/json_parse/bad-38.out
@@ -0,0 +1 @@
+exception: bad-38.json: JSON: offset 11: UTF-16 high surrogate found after previous high surrogate at offset 3
diff --git a/libtests/qtest/json_parse/bad-39.json b/libtests/qtest/json_parse/bad-39.json
new file mode 100644
index 00000000..2edab94b
--- /dev/null
+++ b/libtests/qtest/json_parse/bad-39.json
@@ -0,0 +1 @@
+"u:\ud83e all alone"
diff --git a/libtests/qtest/json_parse/bad-39.out b/libtests/qtest/json_parse/bad-39.out
new file mode 100644
index 00000000..a408dba8
--- /dev/null
+++ b/libtests/qtest/json_parse/bad-39.out
@@ -0,0 +1 @@
+exception: bad-39.json: JSON: offset 3: UTF-16 high surrogate not followed by low surrogate
diff --git a/libtests/qtest/json_parse/good-11-react.out b/libtests/qtest/json_parse/good-11-react.out
new file mode 100644
index 00000000..6cf3345e
--- /dev/null
+++ b/libtests/qtest/json_parse/good-11-react.out
@@ -0,0 +1,16 @@
+array start
+array item: [4, 0): []
+array start
+array item: [5, 11): "u:π"
+array item: [13, 23): "u:π"
+array item: [25, 39): "b:EFBBBFCF80"
+array item: [41, 53): "b:feff03c0"
+container end: [4, 54): []
+array item: [58, 0): []
+array start
+array item: [59, 67): "u:🥔"
+array item: [69, 85): "u:🥔"
+array item: [87, 103): "b:feffd83eDD54"
+container end: [58, 104): []
+container end: [0, 106): []
+[]
diff --git a/libtests/qtest/json_parse/good-11.json b/libtests/qtest/json_parse/good-11.json
new file mode 100644
index 00000000..0a492795
--- /dev/null
+++ b/libtests/qtest/json_parse/good-11.json
@@ -0,0 +1,4 @@
+[
+ ["u:π", "u:\u03c0", "b:EFBBBFCF80", "b:feff03c0"],
+ ["u:🥔", "u:\ud83e\udd54", "b:feffd83eDD54"]
+]
diff --git a/libtests/qtest/json_parse/save-11.json b/libtests/qtest/json_parse/save-11.json
new file mode 100644
index 00000000..f935b8bf
--- /dev/null
+++ b/libtests/qtest/json_parse/save-11.json
@@ -0,0 +1,13 @@
+[
+ [
+ "u:π",
+ "u:π",
+ "b:EFBBBFCF80",
+ "b:feff03c0"
+ ],
+ [
+ "u:🥔",
+ "u:🥔",
+ "b:feffd83eDD54"
+ ]
+]