From aef157a3f6f3fba84b90956a15e91e15e14743eb Mon Sep 17 00:00:00 2001 From: Alex Rousskov Date: Fri, 23 Feb 2024 04:26:38 +0000 Subject: [PATCH] Fix marking of problematic cached IP addresses (#1691) Since inception in 2017 commit fd9c47d, Dns::CachedIps::have() always returned position zero after finding a matching IP address (at zero or positive position). The bug affected two callers: * markAsBad() always marked the first stored address (as bad); * forgetMarking() always cleared the first stored address marking. Buggy markings led to Squid sometimes not attempting to use a working address (e.g., IPv4) while using a known problematic one (e.g., IPv6). --- src/ipcache.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ipcache.cc b/src/ipcache.cc index e5aec7f20d..d363589440 100644 --- a/src/ipcache.cc +++ b/src/ipcache.cc @@ -992,6 +992,7 @@ Dns::CachedIps::have(const Ip::Address &ip, size_t *positionOrNil) const debugs(14, 7, ip << " at " << pos << " in " << *this); return true; } + ++pos; // TODO: Replace with std::views::enumerate() after upgrading to C++23 } // no such address; leave *position as is debugs(14, 7, " no " << ip << " in " << *this); -- 2.47.2