From 8b379d4fb116b6d7a6cc2eca13899acef0b89cf7 Mon Sep 17 00:00:00 2001 From: Mohammad Nejati Date: Sun, 15 Dec 2024 08:29:50 +0000 Subject: [PATCH] Fix out-of-band access issue in `iequals` function --- include/boost/beast/core/impl/string.ipp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/include/boost/beast/core/impl/string.ipp b/include/boost/beast/core/impl/string.ipp index b64ce3f6..7f0949ea 100644 --- a/include/boost/beast/core/impl/string.ipp +++ b/include/boost/beast/core/impl/string.ipp @@ -23,29 +23,26 @@ iequals( beast::string_view lhs, beast::string_view rhs) { - auto n = lhs.size(); - if(rhs.size() != n) + if(lhs.size() != rhs.size()) return false; + auto n = lhs.size(); auto p1 = lhs.data(); auto p2 = rhs.data(); - char a, b; // fast loop while(n--) { - a = *p1++; - b = *p2++; - if(a != b) + if(*p1++ != *p2++) goto slow; } return true; slow: + --p1; + --p2; do { - if( detail::ascii_tolower(a) != - detail::ascii_tolower(b)) + if( detail::ascii_tolower(*p1++) != + detail::ascii_tolower(*p2++)) return false; - a = *p1++; - b = *p2++; } while(n--); return true;