diff --git a/mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp b/mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp index 6e7fdd1b6f0..2dff6f16956 100644 --- a/mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp +++ b/mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp @@ -631,8 +631,15 @@ nsDiskCacheDevice::OnDataSizeChange(nsCacheEntry * entry, PRInt32 deltaSize) NS_ASSERTION(binding->mRecord.ValidRecord(), "bad record"); + PRUint32 newSize = entry->DataSize() + deltaSize; + if (newSize > mCacheCapacity) { + nsresult rv = nsCacheService::GlobalInstance()->DoomEntry_Locked(entry); + NS_ASSERTION(NS_SUCCEEDED(rv),"DoomEntry_Locked() failed."); + return NS_ERROR_ABORT; + } + PRUint32 sizeK = ((entry->DataSize() + 0x0399) >> 10); // round up to next 1k - PRUint32 newSizeK = ((entry->DataSize() + deltaSize + 0x399) >> 10); + PRUint32 newSizeK = ((newSize + 0x399) >> 10); NS_ASSERTION((sizeK < USHRT_MAX) && (sizeK == binding->mRecord.DataFileSize()), "data size out of sync"); diff --git a/mozilla/netwerk/cache/src/nsMemoryCacheDevice.cpp b/mozilla/netwerk/cache/src/nsMemoryCacheDevice.cpp index 4eb9d39889a..0e0c8cf7a16 100644 --- a/mozilla/netwerk/cache/src/nsMemoryCacheDevice.cpp +++ b/mozilla/netwerk/cache/src/nsMemoryCacheDevice.cpp @@ -250,6 +250,12 @@ nsMemoryCacheDevice::OnDataSizeChange( nsCacheEntry * entry, PRInt32 deltaSize) { if (entry->IsStreamData()) { // we have the right to refuse or pre-evict + PRUint32 newSize = entry->DataSize() + deltaSize; + if (newSize > mSoftLimit) { + nsresult rv = nsCacheService::GlobalInstance()->DoomEntry_Locked(entry); + NS_ASSERTION(NS_SUCCEEDED(rv),"DoomEntry_Locked() failed."); + return NS_ERROR_ABORT; + } } // adjust our totals