Skip to content

Commit

Permalink
Fixes narrowing conversion.
Browse files Browse the repository at this point in the history
NOTE: I had to disable the TLS tests because I shotdown the server I was
running on my domain occase.de. Once this ticket is merged I will open a
new one to fix that and reenable the tests.
  • Loading branch information
mzimbres committed Mar 20, 2024
1 parent 69bb690 commit 7ac7851
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 9 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions include/boost/redis/resp3/impl/parser.ipp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (c) 2018-2023 Marcelo Zimbres Silva ([email protected])
/* Copyright (c) 2018-2024 Marcelo Zimbres Silva ([email protected])
*
* Distributed under the Boost Software License, Version 1.0. (See
* accompanying file LICENSE.txt)
Expand All @@ -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())
Expand All @@ -29,7 +29,7 @@ void parser::reset()
{
depth_ = 0;
sizes_ = {{1}};
bulk_length_ = (std::numeric_limits<unsigned long>::max)();
bulk_length_ = (std::numeric_limits<std::size_t>::max)();
bulk_ = type::invalid;
consumed_ = 0;
sizes_[0] = 2; // The sentinel must be more than 1.
Expand Down Expand Up @@ -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 {};
Expand Down
6 changes: 2 additions & 4 deletions include/boost/redis/resp3/parser.hpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (c) 2018-2023 Marcelo Zimbres Silva ([email protected])
/* Copyright (c) 2018-2024 Marcelo Zimbres Silva ([email protected])
*
* Distributed under the Boost Software License, Version 1.0. (See
* accompanying file LICENSE.txt)
Expand All @@ -16,8 +16,6 @@

namespace boost::redis::resp3 {

using int_type = std::uint64_t;

class parser {
public:
using node_type = basic_node<std::string_view>;
Expand All @@ -38,7 +36,7 @@ class parser {
std::array<std::size_t, max_embedded_depth + 1> 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.
Expand Down
3 changes: 2 additions & 1 deletion test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 7ac7851

Please sign in to comment.