From 36794a60cf2a9739d4e1b021c9ba00feef9d42da Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Fri, 25 Feb 2022 11:42:50 -0500 Subject: Allow \/ in a json string --- ChangeLog | 5 +++++ libqpdf/JSON.cc | 5 ++++- libtests/qtest/json_parse/good-01.json | 2 +- libtests/qtest/json_parse/save-01.json | 3 ++- 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 + + * 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 * 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" ] } -- cgit v1.2.3-70-g09d2