From 7e9ac16c225897b9d86bc3622680992895d8634d Mon Sep 17 00:00:00 2001 From: Edward Hennis Date: Wed, 5 Apr 2017 12:08:20 -0400 Subject: [PATCH] Fix Json Int/UInt comparison limit check --- src/ripple/json/impl/json_value.cpp | 4 ---- src/test/json/json_value_test.cpp | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ripple/json/impl/json_value.cpp b/src/ripple/json/impl/json_value.cpp index e6d955866f..3b4f06d8dd 100644 --- a/src/ripple/json/impl/json_value.cpp +++ b/src/ripple/json/impl/json_value.cpp @@ -402,10 +402,6 @@ int integerCmp (Int i, UInt ui) if (i < 0) return -1; - // All unsigned numbers with bit 0 set are too big for signed integers. - if (ui & 0x8000) - return 1; - // Now we can safely compare. return (i < ui) ? -1 : (i == ui) ? 0 : 1; } diff --git a/src/test/json/json_value_test.cpp b/src/test/json/json_value_test.cpp index e4fa8d056d..081757c72b 100644 --- a/src/test/json/json_value_test.cpp +++ b/src/test/json/json_value_test.cpp @@ -91,8 +91,13 @@ struct json_value_test : beast::unit_test::suite BEAST_EXPECT(j1["max_int"].asInt() == max_int); BEAST_EXPECT(j1["min_int"].asInt() == min_int); BEAST_EXPECT(j1["a_uint"].asUInt() == a_uint); + BEAST_EXPECT(j1["a_uint"] > a_large_int); + BEAST_EXPECT(j1["a_uint"] > a_small_int); BEAST_EXPECT(j1["a_large_int"].asInt() == a_large_int); + BEAST_EXPECT(j1["a_large_int"].asUInt() == a_large_int); + BEAST_EXPECT(j1["a_large_int"] < a_uint); BEAST_EXPECT(j1["a_small_int"].asInt() == a_small_int); + BEAST_EXPECT(j1["a_small_int"] < a_uint); json = "{\"overflow\":"; json += std::to_string(std::uint64_t(max_uint) + 1);