Fix error whenparses the value of 5E-324 with libc++

Signed-off-by: fangyunzhong <fangyunzhong2@huawei.com>
This commit is contained in:
fangyunzhong 2023-12-13 14:53:26 +08:00
parent 3774339b4a
commit cac3aed223
2 changed files with 19 additions and 1 deletions

View File

@ -0,0 +1,17 @@
diff --git a/src/lib_json/json_reader.cpp b/src/lib_json/json_reader.cpp
index f233abb..8f4c544 100755
--- a/src/lib_json/json_reader.cpp
+++ b/src/lib_json/json_reader.cpp
@@ -1666,6 +1666,12 @@ bool OurReader::decodeDouble(Token& token, Value& decoded) {
const String buffer(token.start_, token.end_);
IStringStream is(buffer);
if (!(is >> value)) {
+ // the value could be lower than numeric_limits<double>::min(), in this situtation we should return the value with the gurantee
+ // of conversion which has been performed and no occurances of range error.
+ if ((value > 0 && value < std::numeric_limits<double>::min()) || (value < 0 && value > -std::numeric_limits<double>::min())) {
+ decoded = value;
+ return true;
+ }
return addError(
"'" + String(token.start_, token.end_) + "' is not a number.", token);
}

View File

@ -47,7 +47,7 @@ def apply_patch(patch_file, target_dir):
def do_patch(args, target_dir):
patch_file = []
patch_file = [ "Fix error whenparses the value of 5E-324 with libc++.patch" ]
for patch in patch_file:
file_path = os.path.join(args.source_file, patch)
@ -62,6 +62,7 @@ def main():
tar_file_path = os.path.join(args.source_file, "jsoncpp-1.9.5.tar.gz")
target_dir = os.path.join(args.gen_dir, "jsoncpp-1.9.5")
untar_file(tar_file_path, target_dir, args)
do_patch(args, target_dir)
return 0