From 0721d3c389eceacf4e2adb0710c27c1bc2f32547 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Fri, 23 Oct 2026 10:18:21 +0200 Subject: [PATCH] 2.3.2: get_string_with_length for the plain-order string sites (#5891) Signed-off-by: Niels Lohmann --- .../nlohmann/detail/input/binary_reader.hpp | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/include/nlohmann/detail/input/binary_reader.hpp b/include/nlohmann/detail/input/binary_reader.hpp index 6acb9d7aa..95615b2c3 100644 --- a/include/nlohmann/detail/input/binary_reader.hpp +++ b/include/nlohmann/detail/input/binary_reader.hpp @@ -2050,20 +2050,17 @@ class binary_reader case 0xD9: // str 8 { - std::uint8_t len{}; - return get_number(len) && get_string(len, result) && check_string_utf8(result, context); + return get_string_with_length(result, context); } case 0xDA: // str 16 { - std::uint16_t len{}; - return get_number(len) && get_string(len, result) && check_string_utf8(result, context); + return get_string_with_length(result, context); } case 0xDB: // str 32 { - std::uint32_t len{}; - return get_number(len) && get_string(len, result) && check_string_utf8(result, context); + return get_string_with_length(result, context); } default: @@ -2508,8 +2505,7 @@ class binary_reader { case 'U': { - std::uint8_t len{}; - return get_number(len) && get_string(len, result) && check_string_utf8(result, context); + return get_string_with_length(result, context); } case 'i': @@ -2542,8 +2538,7 @@ class binary_reader { break; } - std::uint16_t len{}; - return get_number(len) && get_string(len, result) && check_string_utf8(result, context); + return get_string_with_length(result, context); } case 'm': @@ -2552,8 +2547,7 @@ class binary_reader { break; } - std::uint32_t len{}; - return get_number(len) && get_string(len, result) && check_string_utf8(result, context); + return get_string_with_length(result, context); } case 'M': @@ -2562,8 +2556,7 @@ class binary_reader { break; } - std::uint64_t len{}; - return get_number(len) && get_string(len, result) && check_string_utf8(result, context); + return get_string_with_length(result, context); } default: @@ -4122,6 +4115,22 @@ class binary_reader return true; } + /*! + @brief read a length of type @a NumberType, then a string of that many bytes + + @tparam NumberType the type of the length field + @param[out] result string the bytes are appended to + @param[in] context further context information (for diagnostics) + + @return whether reading and validating the string succeeded + */ + template + bool get_string_with_length(string_t& result, const char* context) + { + NumberType len{}; + return get_number(len) && get_string(len, result) && check_string_utf8(result, context); + } + /*! @brief create a byte array by reading bytes from the input