jsoncpp: Fix broken handling of escape characters

Applying this backported patch from upstream fixes the following
BAT test failure:

jsoncpp.jsoncpp_system_tests.TestJsoncpp.test_run_jsoncpp_test
(from systemtests--bmt--BAT) :
* Detail of EscapeSequenceTest/writeEscapeSequence test failure:
/usr/src/debug/jsoncpp/1.9.2-r0/git/src/test_lib_json/main.cpp(3370): expected == result
  Expected: '["\"","\\","\b","\f","\n","\r","\t","\u0278","\ud852\udf62"]
  '
  Actual  : '["\"","\\","\b","\f","\n","\r","\t","ɸ","𤭢"]

This test failure happens because aarch64 uses unsigned char as
default type for char, while x86 uses signed char. Also, there
is another bug in the code that is fixed by this upstream patch:

 "static_cast<unsigned char>(*cur) < 0x80" should be:
 "static_cast<unsigned char>(*cur) >= 0x80"

Signed-off-by: Ranjitsinh Rathod <ranjitsinhrathod1991@gmail.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
This commit is contained in:
Viktor Rosendahl 2023-04-27 21:56:44 +05:30 committed by Armin Kuster
parent 34f5646bba
commit 765cfa779d
2 changed files with 56 additions and 1 deletions

View File

@ -0,0 +1,52 @@
From 2d5a94aeeab01f0448b5a0bb8d4a9a23a5b790d5 Mon Sep 17 00:00:00 2001
From: Andrew Childs <lorne@cons.org.nz>
Date: Sat, 28 Dec 2019 16:04:24 +0900
Subject: [PATCH] json_writer: fix inverted sense in isAnyCharRequiredQuoting
(#1120)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This bug is only affects platforms where `char` is unsigned.
When char is a signed type, values >= 0x80 are also considered < 0,
and hence require escaping due to the < ' ' condition.
When char is an unsigned type, values >= 0x80 match none of the
conditions and are considered safe to emit without escaping.
This shows up as a test failure:
* Detail of EscapeSequenceTest/writeEscapeSequence test failure:
/build/source/src/test_lib_json/main.cpp(3370): expected == result
Expected: '["\"","\\","\b","\f","\n","\r","\t","\u0278","\ud852\udf62"]
'
Actual : '["\"","\\","\b","\f","\n","\r","\t","ɸ","𤭢"]
'
Upstream-Status: Backport [https://github.com/open-source-parsers/jsoncpp/commit/f11611c8785082ead760494cba06196f14a06dcb]
Signed-off-by: Viktor Rosendahl <Viktor.Rosendahl@bmw.de>
---
src/lib_json/json_writer.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp
index 519ce23..b68a638 100644
--- a/src/lib_json/json_writer.cpp
+++ b/src/lib_json/json_writer.cpp
@@ -178,8 +178,9 @@ static bool isAnyCharRequiredQuoting(char const* s, size_t n) {
char const* const end = s + n;
for (char const* cur = s; cur < end; ++cur) {
- if (*cur == '\\' || *cur == '\"' || *cur < ' ' ||
- static_cast<unsigned char>(*cur) < 0x80)
+ if (*cur == '\\' || *cur == '\"' ||
+ static_cast<unsigned char>(*cur) < ' ' ||
+ static_cast<unsigned char>(*cur) >= 0x80)
return true;
}
return false;
--
2.17.1

View File

@ -14,7 +14,10 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=fa2a23dd1dc6c139f35105379d76df2b"
SRCREV = "d2e6a971f4544c55b8e3b25cf96db266971b778f"
SRC_URI = "git://github.com/open-source-parsers/jsoncpp;branch=master;protocol=https"
SRC_URI = "\
git://github.com/open-source-parsers/jsoncpp;branch=master;protocol=https \
file://0001-json_writer-fix-inverted-sense-in-isAnyCharRequiredQ.patch \
"
S = "${WORKDIR}/git"