From 8cd6c2a6db9c35e44d7551d6f2ed3acaf29f1777 Mon Sep 17 00:00:00 2001 From: zhangzhangxin Date: Fri, 28 Apr 2023 14:25:44 +0800 Subject: [PATCH] sync:Add nullptr Json::Value constructor Signed-off-by: zhangzhangxin --- 0001-sync-Issue-1182-Fix-fuzzing-bug.patch | 40 +++++++++++++++++++ ...sprint-because-it-is-locale-specific.patch | 40 +++++++++++++++++++ include/json/value.h | 1 + 3 files changed, 81 insertions(+) create mode 100644 0001-sync-Issue-1182-Fix-fuzzing-bug.patch create mode 100644 0002-sync-avoid-isprint-because-it-is-locale-specific.patch diff --git a/0001-sync-Issue-1182-Fix-fuzzing-bug.patch b/0001-sync-Issue-1182-Fix-fuzzing-bug.patch new file mode 100644 index 0000000..79374d4 --- /dev/null +++ b/0001-sync-Issue-1182-Fix-fuzzing-bug.patch @@ -0,0 +1,40 @@ +From 0398d63a8435d5b8f71f07aa8c42e7d65815f97e Mon Sep 17 00:00:00 2001 +From: zhangzhangxin +Date: Fri, 28 Apr 2023 10:50:40 +0800 +Subject: [PATCH] sync:Issue 1182: Fix fuzzing bug + +Signed-off-by: zhangzhangxin +--- + src/lib_json/json_reader.cpp | 7 +++++-- + test/data/fail_invalid_quote.json | 1 + + 2 files changed, 6 insertions(+), 2 deletions(-) + create mode 100644 test/data/fail_invalid_quote.json + +diff --git a/src/lib_json/json_reader.cpp b/src/lib_json/json_reader.cpp +index 23cbe60..19922a8 100644 +--- a/src/lib_json/json_reader.cpp ++++ b/src/lib_json/json_reader.cpp +@@ -1175,8 +1175,11 @@ bool OurReader::readToken(Token& token) { + if (features_.allowSingleQuotes_) { + token.type_ = tokenString; + ok = readStringSingleQuote(); +- break; +- } // else fall through ++ } else { ++ // If we don't allow single quotes, this is a failure case. ++ ok = false; ++ } ++ break; + case '/': + token.type_ = tokenComment; + ok = readComment(); +diff --git a/test/data/fail_invalid_quote.json b/test/data/fail_invalid_quote.json +new file mode 100644 +index 0000000..0dd76ed +--- /dev/null ++++ b/test/data/fail_invalid_quote.json +@@ -0,0 +1 @@ ++{'//this is bad JSON.'} +-- +2.40.0.windows.1 + diff --git a/0002-sync-avoid-isprint-because-it-is-locale-specific.patch b/0002-sync-avoid-isprint-because-it-is-locale-specific.patch new file mode 100644 index 0000000..c051e5a --- /dev/null +++ b/0002-sync-avoid-isprint-because-it-is-locale-specific.patch @@ -0,0 +1,40 @@ +From 08fec11ca29e0bce7d8cece6d2ab62d0604b2c9a Mon Sep 17 00:00:00 2001 +From: zhangzhangxin +Date: Fri, 28 Apr 2023 11:54:36 +0800 +Subject: [PATCH] sync:avoid isprint, because it is locale specific + +Signed-off-by: zhangzhangxin +--- + src/lib_json/json_writer.cpp | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp +index 03a777f..8bf02db 100644 +--- a/src/lib_json/json_writer.cpp ++++ b/src/lib_json/json_writer.cpp +@@ -175,11 +175,11 @@ String valueToString(double value, unsigned int precision, + + String valueToString(bool value) { return value ? "true" : "false"; } + +-static bool isAnyCharRequiredQuoting(char const* s, size_t n) { ++static bool doesAnyCharRequireEscaping(char const* s, size_t n) { + assert(s || !n); + + return std::any_of(s, s + n, [](unsigned char c) { +- return c == '\\' || c == '"' || !std::isprint(c); ++ return c == '\\' || c == '"' || c < 0x20 || c > 0x7F; + }); + } + +@@ -275,7 +275,7 @@ static String valueToQuotedStringN(const char* value, unsigned length, + if (value == nullptr) + return ""; + +- if (!isAnyCharRequiredQuoting(value, length)) ++ if (!doesAnyCharRequireEscaping(value, length)) + return String("\"") + value + "\""; + // We have to walk value and escape any special characters. + // Appending to String is not efficient, but this should be rare. +-- +2.40.0.windows.1 + diff --git a/include/json/value.h b/include/json/value.h index dffc51a..df1eba6 100644 --- a/include/json/value.h +++ b/include/json/value.h @@ -342,6 +342,7 @@ public: Value(const StaticString& value); Value(const String& value); Value(bool value); + Value(std::nullptr_t ptr) = delete; Value(const Value& other); Value(Value&& other); ~Value(); -- 2.40.0.windows.1