]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Fix Auth::User::absorb() IP list transfer logic (#2194)
authorJoshua Rogers <MegaManSec@users.noreply.github.com>
Tue, 21 Oct 2025 05:31:41 +0000 (05:31 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Tue, 21 Oct 2025 06:20:53 +0000 (06:20 +0000)
Detach IP from source list before reattaching to destination and
decrement ipcount. This prevents list corruption and counter mismatch.

src/auth/User.cc

index 7b274386aac1e973c1bc4bfe45f10a7aa6db3780..f1f29738b223c33b2347fbc41f79ecab6d0e6a95 100644 (file)
@@ -106,12 +106,13 @@ Auth::User::absorb(Auth::User::Pointer from)
             }
 
             if (!found) {
-                /* This ip is not in the seen list. Add it. */
-                dlinkAddTail(&new_ipdata->node, &ipdata->node, &ip_list);
-                ++ipcount;
                 /* remove from the source list */
                 dlinkDelete(&new_ipdata->node, &(from->ip_list));
-                ++from->ipcount;
+                assert(from->ipcount);
+                --from->ipcount;
+                /* This ip is not in the seen list. Add it. */
+                dlinkAddTail(new_ipdata, &new_ipdata->node, &ip_list);
+                ++ipcount;
             }
         }
     }