From d37b83e8d950edf22313abd16e629fb726e0db7d Mon Sep 17 00:00:00 2001 From: Jiaming Yuan Date: Tue, 20 Feb 2024 22:13:51 +0800 Subject: [PATCH] Fix UBJSON with boolean value. (#10054) --- src/common/json.cc | 2 +- tests/cpp/common/test_json.cc | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/common/json.cc b/src/common/json.cc index de9a89f78..21be2a5bc 100644 --- a/src/common/json.cc +++ b/src/common/json.cc @@ -791,7 +791,7 @@ Json UBJReader::Parse() { return Json{JsonBoolean{true}}; } case 'F': { - return Json{JsonBoolean{true}}; + return Json{JsonBoolean{false}}; } case 'd': { auto v = this->ReadPrimitive(); diff --git a/tests/cpp/common/test_json.cc b/tests/cpp/common/test_json.cc index d361552ce..155cf04ad 100644 --- a/tests/cpp/common/test_json.cc +++ b/tests/cpp/common/test_json.cc @@ -677,6 +677,21 @@ TEST(UBJson, Basic) { ASSERT_FLOAT_EQ(3.14, get(get(ret["test"])[1])); ASSERT_FLOAT_EQ(2.71, get(get(ret["test"])[0])); } + { + // boolean + Json boolean{Object{}}; + boolean["foo"] = Boolean{false}; + std::vector out; + Json::Dump(boolean, &out, std::ios::binary); + auto loaded = Json::Load(StringView{out.data(), out.size()}, std::ios::binary); + + ASSERT_EQ(boolean, loaded); + + boolean["foo"] = Boolean{true}; + Json::Dump(boolean, &out, std::ios::binary); + loaded = Json::Load(StringView{out.data(), out.size()}, std::ios::binary); + ASSERT_EQ(boolean, loaded); + } } TEST(Json, TypeCheck) {