diff --git a/mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp b/mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp index 98af24e9429..e00f1f2ed4e 100644 --- a/mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp +++ b/mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp @@ -676,10 +676,11 @@ nsDiskCacheDevice::OnDataSizeChange(nsCacheEntry * entry, PRInt32 deltaSize) NS_ASSERTION(binding->mRecord.ValidRecord(), "bad record"); PRUint32 newSize = entry->DataSize() + deltaSize; - if (newSize > mCacheCapacity) { + PRUint32 maxSize = PR_MIN(mCacheCapacity / 2, kMaxDataFileSize); + if (newSize > maxSize) { nsresult rv = nsCacheService::DoomEntry(entry); NS_ASSERTION(NS_SUCCEEDED(rv),"DoomEntry() failed."); - return rv; + return NS_ERROR_ABORT; } PRUint32 sizeK = ((entry->DataSize() + 0x03FF) >> 10); // round up to next 1k diff --git a/mozilla/netwerk/cache/src/nsDiskCacheMap.h b/mozilla/netwerk/cache/src/nsDiskCacheMap.h index 1616bcdea41..71fc77ee035 100644 --- a/mozilla/netwerk/cache/src/nsDiskCacheMap.h +++ b/mozilla/netwerk/cache/src/nsDiskCacheMap.h @@ -61,14 +61,15 @@ struct nsDiskCacheEntry; * 2 = 1k block file * 3 = 4k block file * - * eFileSizeMask note: Files larger than 64 Mb have zero size stored in the + * eFileSizeMask note: Files larger than 64 MiB have zero size stored in the * location. The file itself must be examined to determine - * its actual size. + * its actual size. (XXX This is broken in places -darin) * *****************************************************************************/ #define BLOCK_SIZE_FOR_INDEX(index) ((index) ? (256 << (2 * ((index) - 1))) : 0) -#define kSeparateFile 0 +#define kSeparateFile 0 +#define kMaxDataFileSize 0x4000000 // 64 MiB class nsDiskCacheRecord {