From d5f7e04923c5fe55db12e7da006c41c3853b4ddb Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 26 Sep 2019 17:08:33 +0100 Subject: [PATCH] Fix array index error in address_v6 comparisons * include/experimental/internet (operator==, operator<): Fix loop condition to avoid reading past the end of the array. From-SVN: r276153 --- libstdc++-v3/ChangeLog | 3 +++ libstdc++-v3/include/experimental/internet | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 5d2349b..8484a7e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,8 @@ 2019-09-26 Jonathan Wakely + * include/experimental/internet (operator==, operator<): Fix loop + condition to avoid reading past the end of the array. + * include/std/array: Remove references to profile mode. * include/std/bitset: Likewise. * include/std/deque: Likewise. diff --git a/libstdc++-v3/include/experimental/internet b/libstdc++-v3/include/experimental/internet index 44d757c..929a747 100644 --- a/libstdc++-v3/include/experimental/internet +++ b/libstdc++-v3/include/experimental/internet @@ -539,7 +539,7 @@ namespace ip const auto& __aa = __a._M_bytes; const auto& __bb = __b._M_bytes; int __i = 0; - for (; __aa[__i] == __bb[__i] && __i < 16; ++__i) + for (; __i < 16 && __aa[__i] == __bb[__i]; ++__i) ; return __i == 16 ? __a.scope_id() == __b.scope_id() : false; } @@ -554,7 +554,7 @@ namespace ip const auto& __aa = __a._M_bytes; const auto& __bb = __b._M_bytes; int __i = 0; - for (; __aa[__i] == __bb[__i] && __i < 16; ++__i) + for (; __i < 16 && __aa[__i] == __bb[__i]; ++__i) ; return __i == 16 ? __a.scope_id() < __b.scope_id() : __aa[__i] < __bb[__i]; } -- 2.7.4