diff --git a/README.md b/README.md index 90d771e3..a27c435a 100644 --- a/README.md +++ b/README.md @@ -702,6 +702,14 @@ https://lists.boost.org/Archives/boost/2023/01/253944.php. Sets `"default"` as the default value of `config::username`. This makes it simpler to use the `requirepass` configuration in Redis. +* ([Issue 189](https://github.com/boostorg/redis/issues/189)). + Fixes narrowing convertion by using `std::size_t` instead of + `std::uint64_t` for the sizes of bulks and aggregates. The code + relies now on `std::from_chars` returning an error if a value + greater than 32 is received on platforms on which the size + of`std::size_t` is 32. + + ### Boost 1.84 (First release in Boost) * Deprecates the `async_receive` overload that takes a response. Users diff --git a/include/boost/redis/resp3/impl/parser.ipp b/include/boost/redis/resp3/impl/parser.ipp index 8a70739b..eda9991d 100644 --- a/include/boost/redis/resp3/impl/parser.ipp +++ b/include/boost/redis/resp3/impl/parser.ipp @@ -1,4 +1,4 @@ -/* Copyright (c) 2018-2023 Marcelo Zimbres Silva (mzimbres@gmail.com) +/* Copyright (c) 2018-2024 Marcelo Zimbres Silva (mzimbres@gmail.com) * * Distributed under the Boost Software License, Version 1.0. (See * accompanying file LICENSE.txt) @@ -13,7 +13,7 @@ namespace boost::redis::resp3 { -void to_int(int_type& i, std::string_view sv, system::error_code& ec) +void to_int(std::size_t& i, std::string_view sv, system::error_code& ec) { auto const res = std::from_chars(sv.data(), sv.data() + std::size(sv), i); if (res.ec != std::errc()) @@ -29,7 +29,7 @@ void parser::reset() { depth_ = 0; sizes_ = {{1}}; - bulk_length_ = (std::numeric_limits::max)(); + bulk_length_ = (std::numeric_limits::max)(); bulk_ = type::invalid; consumed_ = 0; sizes_[0] = 2; // The sentinel must be more than 1. @@ -189,7 +189,7 @@ parser::consume_impl( case type::attribute: case type::map: { - int_type l = -1; + std::size_t l = -1; to_int(l, elem, ec); if (ec) return {}; diff --git a/include/boost/redis/resp3/parser.hpp b/include/boost/redis/resp3/parser.hpp index 40cc4056..d40e239a 100644 --- a/include/boost/redis/resp3/parser.hpp +++ b/include/boost/redis/resp3/parser.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2018-2023 Marcelo Zimbres Silva (mzimbres@gmail.com) +/* Copyright (c) 2018-2024 Marcelo Zimbres Silva (mzimbres@gmail.com) * * Distributed under the Boost Software License, Version 1.0. (See * accompanying file LICENSE.txt) @@ -16,8 +16,6 @@ namespace boost::redis::resp3 { -using int_type = std::uint64_t; - class parser { public: using node_type = basic_node; @@ -38,7 +36,7 @@ class parser { std::array sizes_; // Contains the length expected in the next bulk read. - int_type bulk_length_; + std::size_t bulk_length_; // The type of the next bulk. Contains type::invalid if no bulk is // expected. diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 049469f3..d5fc0793 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -30,7 +30,8 @@ macro(make_test TEST_NAME STANDARD) endmacro() make_test(test_conn_quit 17) -make_test(test_conn_tls 17) +# TODO: Configure a Redis server with TLS in the CI and reenable this test. +#make_test(test_conn_tls 17) make_test(test_low_level 17) make_test(test_conn_exec_retry 17) make_test(test_conn_exec_error 17)