commit 671dccb84a84 Author: Emilio Cobos Álvarez Date: Sun Jan 7 01:10:10 2018 +0100 Bug 1428589: Correctly handle expiring all the cookies in an entry. r=jdm MozReview-Commit-ID: 6qaC9yclvP2 --- netwerk/cookie/nsCookieService.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git netwerk/cookie/nsCookieService.cpp netwerk/cookie/nsCookieService.cpp index b73aaa2129e3..672ca06be628 100644 --- netwerk/cookie/nsCookieService.cpp +++ netwerk/cookie/nsCookieService.cpp @@ -4469,8 +4469,9 @@ nsCookieService::PurgeCookies(int64_t aCurrentTimeInUsec) for (auto iter = mDBState->hostTable.Iter(); !iter.Done(); iter.Next()) { nsCookieEntry* entry = iter.Get(); - const nsCookieEntry::ArrayType &cookies = entry->GetCookies(); - for (nsCookieEntry::IndexType i = 0; i < cookies.Length(); ) { + const nsCookieEntry::ArrayType& cookies = entry->GetCookies(); + auto length = cookies.Length(); + for (nsCookieEntry::IndexType i = 0; i < length; ) { nsListIter iter(entry, i); nsCookie* cookie = cookies[i]; @@ -4479,9 +4480,12 @@ nsCookieService::PurgeCookies(int64_t aCurrentTimeInUsec) removedList->AppendElement(cookie); COOKIE_LOGEVICTED(cookie, "Cookie expired"); - // remove from list; do not increment our iterator + // remove from list; do not increment our iterator, but stop if we're + // done already. gCookieService->RemoveCookieFromList(iter, paramsArray); - + if (i == --length) { + break; + } } else { // check if the cookie is over the age limit if (cookie->LastAccessed() <= purgeTime) { @@ -4494,6 +4498,7 @@ nsCookieService::PurgeCookies(int64_t aCurrentTimeInUsec) ++i; } + MOZ_ASSERT(length == cookies.Length()); } }