diff --git a/src/protocol_muxer/multiselect/parser.cpp b/src/protocol_muxer/multiselect/parser.cpp index 39f35c91..8c9049a2 100644 --- a/src/protocol_muxer/multiselect/parser.cpp +++ b/src/protocol_muxer/multiselect/parser.cpp @@ -44,8 +44,12 @@ namespace libp2p::protocol_muxer::multiselect::detail { if (expected_msg_size_ == 0) { auto s = varint_reader_.consume(data); + if (varint_reader_.size() > kMaxLenBytes) { + state_ = kOverflow; + break; + } if (s == VarintPrefixReader::kUnderflow) { - if (varint_reader_.size() >= kMaxLenBytes) { + if (varint_reader_.size() == kMaxLenBytes) { state_ = kOverflow; break; } @@ -55,10 +59,6 @@ namespace libp2p::protocol_muxer::multiselect::detail { state_ = kOverflow; break; } - if (varint_reader_.size() > kMaxLenBytes) { - state_ = kOverflow; - break; - } expected_msg_size_ = static_cast(varint_reader_.value()); if (expected_msg_size_ == 0) { // zero varint received, not acceptable, but not fatal