Blob Blame History Raw
diff -up chromium-85.0.4183.102/net/cookies/cookie_monster.cc.fixme chromium-85.0.4183.102/net/cookies/cookie_monster.cc
--- chromium-85.0.4183.102/net/cookies/cookie_monster.cc.fixme	2020-09-21 14:52:06.606722391 -0400
+++ chromium-85.0.4183.102/net/cookies/cookie_monster.cc	2020-09-21 14:53:40.247366159 -0400
@@ -1151,9 +1151,14 @@ CookieMonster::CookieMap::iterator Cooki
   // |num_keys_| counter.
   bool different_prev =
       inserted == cookies_.begin() || std::prev(inserted)->first != key;
-  bool different_next =
-      inserted == cookies_.end() || std::next(inserted)->first != key;
-  if (different_prev && different_next)
+  // According to std::multiqueue documentation:
+  // "If the container has elements with equivalent key, inserts at the upper
+  // bound of that range. (since C++11)"
+  // This means that "inserted" iterator either points to the last element in
+  // the map, or the element succeeding it has to have different key.
+  DCHECK(std::next(inserted) == cookies_.end() ||
+         std::next(inserted)->first != key);
+  if (different_prev)
     ++num_keys_;
 
   return inserted;
@@ -1373,7 +1378,7 @@ void CookieMonster::InternalDeleteCookie
   bool different_prev =
       it == cookies_.begin() || std::prev(it)->first != it->first;
   bool different_next =
-      it == cookies_.end() || std::next(it)->first != it->first;
+      std::next(it) == cookies_.end() || std::next(it)->first != it->first;
   if (different_prev && different_next)
     --num_keys_;