aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-02-25 17:42:50 +0100
committerJay Berkenbilt <ejb@ql.org>2022-02-25 17:42:50 +0100
commit36794a60cf2a9739d4e1b021c9ba00feef9d42da (patch)
tree13d7718a46e4d4fd0a0bb419974fcb8502fd1b22
parente7ecc348f9c48af9a04a5426ca30b9f414ba12d9 (diff)
downloadqpdf-36794a60cf2a9739d4e1b021c9ba00feef9d42da.tar.zst
Allow \/ in a json string
-rw-r--r--ChangeLog5
-rw-r--r--libqpdf/JSON.cc5
-rw-r--r--libtests/qtest/json_parse/good-01.json2
-rw-r--r--libtests/qtest/json_parse/save-01.json3
4 files changed, 12 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index da642862..379f53ab 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2022-02-25 Jay Berkenbilt <ejb@ql.org>
+
+ * Bug fix in JSON parser: accept \/ in a string as valid input per
+ JSON spec even though we don't translate / to \/ on output.
+
2022-02-22 Jay Berkenbilt <ejb@ql.org>
* Recognize PDF strings explicitly marked as UTF-8 as allowed by
diff --git a/libqpdf/JSON.cc b/libqpdf/JSON.cc
index 4def376e..3f96ab5d 100644
--- a/libqpdf/JSON.cc
+++ b/libqpdf/JSON.cc
@@ -629,6 +629,9 @@ JSONParser::decode_string(std::string const& str)
{
case '\\':
case '\"':
+ case '/':
+ // \/ is allowed in json input, but so is /, so we
+ // don't map / to \/ in output.
result.append(1, ch);
break;
case 'b':
@@ -875,7 +878,7 @@ void JSONParser::getToken()
case ls_backslash:
/* cSpell: ignore bfnrt */
- if (strchr("\\\"bfnrt", *p))
+ if (strchr("\\\"/bfnrt", *p))
{
lex_state = ls_string;
}
diff --git a/libtests/qtest/json_parse/good-01.json b/libtests/qtest/json_parse/good-01.json
index 3d6ce297..7b3bdb3a 100644
--- a/libtests/qtest/json_parse/good-01.json
+++ b/libtests/qtest/json_parse/good-01.json
@@ -1,3 +1,3 @@
{"a": "bcd", "e": [1,
2, 3,4,"five", {"six": 7, "8": 9}, null, true,
- false]}
+ false, "a\b\f\n\r\t\\\"\/z"]}
diff --git a/libtests/qtest/json_parse/save-01.json b/libtests/qtest/json_parse/save-01.json
index 2a9e3c20..a9ef052a 100644
--- a/libtests/qtest/json_parse/save-01.json
+++ b/libtests/qtest/json_parse/save-01.json
@@ -12,6 +12,7 @@
},
null,
true,
- false
+ false,
+ "a\b\f\n\r\t\\\"/z"
]
}