зеркало из https://github.com/mozilla/gecko-dev.git
Bug 902909 - Use fallible allocation when interfacing with Snappy. r=sicking,khuey (original patch by khuey, updated by janv)
This commit is contained in:
Родитель
fcb9c82389
Коммит
59af5cdce4
|
@ -55,6 +55,7 @@ using namespace mozilla::dom;
|
||||||
using namespace mozilla::dom::indexedDB::ipc;
|
using namespace mozilla::dom::indexedDB::ipc;
|
||||||
using mozilla::dom::quota::FileOutputStream;
|
using mozilla::dom::quota::FileOutputStream;
|
||||||
using mozilla::ErrorResult;
|
using mozilla::ErrorResult;
|
||||||
|
using mozilla::fallible_t;
|
||||||
|
|
||||||
BEGIN_INDEXEDDB_NAMESPACE
|
BEGIN_INDEXEDDB_NAMESPACE
|
||||||
|
|
||||||
|
@ -1220,6 +1221,8 @@ IDBObjectStore::GetStructuredCloneReadInfoFromStatement(
|
||||||
const char* compressed = reinterpret_cast<const char*>(blobData);
|
const char* compressed = reinterpret_cast<const char*>(blobData);
|
||||||
size_t compressedLength = size_t(blobDataLength);
|
size_t compressedLength = size_t(blobDataLength);
|
||||||
|
|
||||||
|
static const fallible_t fallible = fallible_t();
|
||||||
|
|
||||||
size_t uncompressedLength;
|
size_t uncompressedLength;
|
||||||
if (!snappy::GetUncompressedLength(compressed, compressedLength,
|
if (!snappy::GetUncompressedLength(compressed, compressedLength,
|
||||||
&uncompressedLength)) {
|
&uncompressedLength)) {
|
||||||
|
@ -1227,7 +1230,8 @@ IDBObjectStore::GetStructuredCloneReadInfoFromStatement(
|
||||||
return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
|
return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsAutoArrayPtr<char> uncompressed(new char[uncompressedLength]);
|
nsAutoArrayPtr<char> uncompressed(new (fallible) char[uncompressedLength]);
|
||||||
|
NS_ENSURE_TRUE(uncompressed, NS_ERROR_OUT_OF_MEMORY);
|
||||||
|
|
||||||
if (!snappy::RawUncompress(compressed, compressedLength,
|
if (!snappy::RawUncompress(compressed, compressedLength,
|
||||||
uncompressed.get())) {
|
uncompressed.get())) {
|
||||||
|
@ -1409,7 +1413,7 @@ StructuredCloneReadString(JSStructuredCloneReader* aReader,
|
||||||
}
|
}
|
||||||
length = SwapBytes(length);
|
length = SwapBytes(length);
|
||||||
|
|
||||||
if (!aString.SetLength(length, mozilla::fallible_t())) {
|
if (!aString.SetLength(length, fallible_t())) {
|
||||||
NS_WARNING("Out of memory?");
|
NS_WARNING("Out of memory?");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -3213,10 +3217,12 @@ AddHelper::DoDatabaseWork(mozIStorageConnection* aConnection)
|
||||||
reinterpret_cast<const char*>(mCloneWriteInfo.mCloneBuffer.data());
|
reinterpret_cast<const char*>(mCloneWriteInfo.mCloneBuffer.data());
|
||||||
size_t uncompressedLength = mCloneWriteInfo.mCloneBuffer.nbytes();
|
size_t uncompressedLength = mCloneWriteInfo.mCloneBuffer.nbytes();
|
||||||
|
|
||||||
|
static const fallible_t fallible = fallible_t();
|
||||||
size_t compressedLength = snappy::MaxCompressedLength(uncompressedLength);
|
size_t compressedLength = snappy::MaxCompressedLength(uncompressedLength);
|
||||||
// This will hold our compressed data until the end of the method. The
|
// This will hold our compressed data until the end of the method. The
|
||||||
// BindBlobByName function will copy it.
|
// BindBlobByName function will copy it.
|
||||||
nsAutoArrayPtr<char> compressed(new char[compressedLength]);
|
nsAutoArrayPtr<char> compressed(new (fallible) char[compressedLength]);
|
||||||
|
NS_ENSURE_TRUE(compressed, NS_ERROR_OUT_OF_MEMORY);
|
||||||
|
|
||||||
snappy::RawCompress(uncompressed, uncompressedLength, compressed.get(),
|
snappy::RawCompress(uncompressed, uncompressedLength, compressed.get(),
|
||||||
&compressedLength);
|
&compressedLength);
|
||||||
|
|
|
@ -881,8 +881,10 @@ public:
|
||||||
rv = aArguments->GetSharedBlob(0, &uncompressedLength, &uncompressed);
|
rv = aArguments->GetSharedBlob(0, &uncompressedLength, &uncompressed);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
static const fallible_t fallible = fallible_t();
|
||||||
size_t compressedLength = snappy::MaxCompressedLength(uncompressedLength);
|
size_t compressedLength = snappy::MaxCompressedLength(uncompressedLength);
|
||||||
nsAutoArrayPtr<char> compressed(new char[compressedLength]);
|
nsAutoArrayPtr<char> compressed(new (fallible) char[compressedLength]);
|
||||||
|
NS_ENSURE_TRUE(compressed, NS_ERROR_OUT_OF_MEMORY);
|
||||||
|
|
||||||
snappy::RawCompress(reinterpret_cast<const char*>(uncompressed),
|
snappy::RawCompress(reinterpret_cast<const char*>(uncompressed),
|
||||||
uncompressedLength, compressed.get(),
|
uncompressedLength, compressed.get(),
|
||||||
|
|
Загрузка…
Ссылка в новой задаче