]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Avoid invalid fileno assertion when purging victim becomes negative on overflows.
authorAlex Rousskov <rousskov@measurement-factory.com>
Mon, 22 Jul 2013 18:02:42 +0000 (12:02 -0600)
committerAlex Rousskov <rousskov@measurement-factory.com>
Mon, 22 Jul 2013 18:02:42 +0000 (12:02 -0600)
Overflows are expected by design, but we should not allow the value to become
negative.

src/ipc/StoreMap.cc
src/ipc/StoreMap.h

index 09791b27210133c69ff48ec8d97c2c5f747e0d29..f27364ebce48a9c717a0424ff07c3ac77b051947 100644 (file)
@@ -352,7 +352,7 @@ Ipc::StoreMap::purgeOne()
     const int searchLimit = min(10000, entryLimit());
     int tries = 0;
     for (; tries < searchLimit; ++tries) {
-        const sfileno fileno = shared->victim++ % shared->limit;
+        const sfileno fileno = static_cast<sfileno>(++shared->victim % shared->limit);
         assert(valid(fileno));
         Anchor &s = shared->slots[fileno].anchor;
         if (s.lock.lockExclusive()) {
index 720fc84b681b5ef71c60372914f7cf2daf91ec2e..d441c858ae4493d87f05517de569598d2860d821 100644 (file)
@@ -115,7 +115,7 @@ public:
         const int limit; ///< maximum number of store entries
         const size_t extrasSize; ///< size of slice extra data
         Atomic::Word count; ///< current number of entries
-        Atomic::WordT<sfileno> victim; ///< starting point for purge search
+        Atomic::WordT<uint32_t> victim; ///< starting point for purge search
         Ipc::Mem::FlexibleArray<StoreMapSlot> slots; ///< storage
     };