diff --git a/mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp b/mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp index c5b89cdf4c7..f875a90555c 100644 --- a/mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp +++ b/mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp @@ -344,7 +344,7 @@ nsDiskCacheEvictor::VisitRecord(nsDiskCacheRecord * mapRecord) exit: delete clientID; - delete diskEntry; + delete [] (char *)diskEntry; return result; } @@ -620,7 +620,7 @@ nsDiskCacheDevice::FindEntry(nsCString * key) if (nsCRT::strcmp(diskEntry->mKeyStart, key->get()) == 0) { entry = diskEntry->CreateCacheEntry(this); } - delete diskEntry; + delete [] (char *)diskEntry; // If we had a hash collision or CreateCacheEntry failed, return nsnull if (!entry) return nsnull; @@ -895,7 +895,7 @@ public: nsresult rv = mCacheMap->ReadDiskCacheEntry(mapRecord, &diskEntry); if (NS_FAILED(rv)) { mResult = rv; - return kStopVisitingRecords; + return kVisitNextRecord; } // create nsICacheEntryInfo @@ -908,7 +908,7 @@ public: PRBool keepGoing; rv = mVisitor->VisitEntry(DISK_CACHE_DEVICE_ID, entryInfo, &keepGoing); - delete diskEntry; + delete [] (char *)diskEntry; return keepGoing ? kVisitNextRecord : kStopVisitingRecords; } diff --git a/mozilla/netwerk/cache/src/nsDiskCacheEntry.cpp b/mozilla/netwerk/cache/src/nsDiskCacheEntry.cpp index 012378fc18d..05cc50d850b 100644 --- a/mozilla/netwerk/cache/src/nsDiskCacheEntry.cpp +++ b/mozilla/netwerk/cache/src/nsDiskCacheEntry.cpp @@ -128,7 +128,7 @@ CreateDiskCacheEntry(nsDiskCacheBinding * binding) PRUint32 metaSize = 0; nsresult rv = entry->FlattenMetaData(&metaData, &metaSize); if (NS_FAILED(rv)) { - delete diskEntry; + delete [] (char *)diskEntry; return nsnull; } @@ -137,6 +137,12 @@ CreateDiskCacheEntry(nsDiskCacheBinding * binding) nsCRT::memcpy(&diskEntry->mKeyStart[keySize], metaData, metaSize); delete metaData; + + pad -= diskEntry->Size(); + NS_ASSERTION(pad >= 0, "under allocated buffer for diskEntry."); + if (pad > 0) + nsCRT::zero(&diskEntry->mKeyStart[keySize+metaSize], pad); + return diskEntry; } diff --git a/mozilla/netwerk/cache/src/nsDiskCacheMap.cpp b/mozilla/netwerk/cache/src/nsDiskCacheMap.cpp index f9b9b62390b..46df6f0a8e6 100644 --- a/mozilla/netwerk/cache/src/nsDiskCacheMap.cpp +++ b/mozilla/netwerk/cache/src/nsDiskCacheMap.cpp @@ -562,6 +562,8 @@ nsDiskCacheMap::ReadDiskCacheEntry(nsDiskCacheRecord * record, nsDiskCacheEntry PRFileDesc * fd = nsnull; *result = nsnull; + if (!record->MetaLocationInitialized()) return NS_ERROR_NOT_AVAILABLE; + if (metaFile == 0) { // entry/metadata stored in separate file // open and read the file nsCOMPtr file; @@ -614,7 +616,7 @@ nsDiskCacheMap::ReadDiskCacheEntry(nsDiskCacheRecord * record, nsDiskCacheEntry exit: // XXX auto ptr would be nice if (fd) (void) PR_Close(fd); - delete diskEntry; + delete [] (char *)diskEntry; return rv; } @@ -657,7 +659,7 @@ nsDiskCacheMap::WriteDiskCacheEntry(nsDiskCacheBinding * binding) "generations out of sync"); } else { rv = DeleteStorage(&binding->mRecord, nsDiskCache::kMetaData); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto exit; } } @@ -719,7 +721,7 @@ nsDiskCacheMap::WriteDiskCacheEntry(nsDiskCacheBinding * binding) } exit: - + delete [] (char *)diskEntry; return rv; }