From e5df0c4ec9848135277f99242bb2f8738f538533 Mon Sep 17 00:00:00 2001 From: Iman Date: Sun, 12 Jan 2025 19:48:44 +0330 Subject: [PATCH] Fix json rendering of large osm ids --- include/util/json_renderer.hpp | 5 ++++- unit_tests/util/json_render.cpp | 9 +++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/include/util/json_renderer.hpp b/include/util/json_renderer.hpp index bdc3dcae0c7..2d88cbfa778 100644 --- a/include/util/json_renderer.hpp +++ b/include/util/json_renderer.hpp @@ -54,7 +54,10 @@ template struct Renderer // `fmt::memory_buffer` stores first 500 bytes in the object itself(i.e. on stack in this // case) and then grows using heap if needed fmt::memory_buffer buffer; - fmt::format_to(std::back_inserter(buffer), FMT_COMPILE("{:.10g}"), number.value); + if (static_cast(number.value) == number.value) + fmt::format_to(std::back_inserter(buffer), FMT_COMPILE("{}"), static_cast(number.value)); + else + fmt::format_to(std::back_inserter(buffer), FMT_COMPILE("{:.10g}"), number.value); write(buffer.data(), buffer.size()); } diff --git a/unit_tests/util/json_render.cpp b/unit_tests/util/json_render.cpp index 4d2ce23cfa9..2422b9dda0e 100644 --- a/unit_tests/util/json_render.cpp +++ b/unit_tests/util/json_render.cpp @@ -87,8 +87,13 @@ BOOST_AUTO_TEST_CASE(test_json_issue_6531) BOOST_CHECK_EQUAL(output, "0.1234567892"); output.clear(); - renderer(123456789123456789.); - BOOST_CHECK_EQUAL(output, "1.234567891e+17"); + renderer(12345678912345678.); + BOOST_CHECK_EQUAL(output, "12345678912345678"); + + // handle large osm ids + output.clear(); + renderer(1000396615812); + BOOST_CHECK_EQUAL(output, "1000396615812"); } BOOST_AUTO_TEST_SUITE_END()