From 50123e0062a9e32a7b66f5355edb280966b7a61f Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Tue, 17 Oct 2017 22:23:30 +0200 Subject: [PATCH] Backed out changeset ef64f4c98cc6 (bug 1409394) for failing browser-chrome's browser_save_link-perwindowpb.js and browser_libraryDrop.js on OS X and leaks detected by chrome test on Linux x64 asan. r=backout on a CLOSED TREE --- dom/file/FileReader.cpp | 84 +++++++++++++---------------------------- 1 file changed, 26 insertions(+), 58 deletions(-) diff --git a/dom/file/FileReader.cpp b/dom/file/FileReader.cpp index ce963ad4d165..94a06f9cda76 100644 --- a/dom/file/FileReader.cpp +++ b/dom/file/FileReader.cpp @@ -264,37 +264,6 @@ FileReader::DoAsyncWait() return NS_OK; } -namespace { - -void -PopulateBufferForBinaryString(char16_t* aDest, const char* aSource, - uint32_t aCount) -{ - const unsigned char* source = (const unsigned char*)aSource; - char16_t* end = aDest + aCount; - while (aDest != end) { - *aDest = *source; - ++aDest; - ++source; - } -} - -nsresult -ReadFuncBinaryString(nsIInputStream* aInputStream, - void* aClosure, - const char* aFromRawSegment, - uint32_t aToOffset, - uint32_t aCount, - uint32_t* aWriteCount) -{ - char16_t* dest = static_cast(aClosure) + aToOffset; - PopulateBufferForBinaryString(dest, aFromRawSegment, aCount); - *aWriteCount = aCount; - return NS_OK; -} - -} // anonymous - nsresult FileReader::DoReadData(uint64_t aCount) { @@ -322,35 +291,34 @@ FileReader::DoReadData(uint64_t aCount) dest += oldLen; - if (NS_InputStreamIsBuffered(mAsyncStream)) { - nsresult rv = mAsyncStream->ReadSegments(ReadFuncBinaryString, dest, - aCount, &bytesRead); - NS_ENSURE_SUCCESS(rv, rv); - } else { - while (aCount > 0) { - char tmpBuffer[4096]; - uint32_t minCount = - XPCOM_MIN(aCount, static_cast(sizeof(tmpBuffer))); - uint32_t read; + while (aCount > 0) { + char tmpBuffer[4096]; + uint32_t minCount = + XPCOM_MIN(aCount, static_cast(sizeof(tmpBuffer))); + uint32_t read; - nsresult rv = mAsyncStream->Read(tmpBuffer, minCount, &read); - if (rv == NS_BASE_STREAM_CLOSED) { - rv = NS_OK; - } - - NS_ENSURE_SUCCESS(rv, rv); - - if (read == 0) { - // The stream finished too early. - return NS_ERROR_OUT_OF_MEMORY; - } - - PopulateBufferForBinaryString(dest, tmpBuffer, read); - - dest += read; - aCount -= read; - bytesRead += read; + nsresult rv = mAsyncStream->Read(tmpBuffer, minCount, &read); + if (rv == NS_BASE_STREAM_CLOSED) { + rv = NS_OK; } + + NS_ENSURE_SUCCESS(rv, rv); + + if (read == 0) { + // The stream finished too early. + return NS_ERROR_OUT_OF_MEMORY; + } + + char16_t* end = dest + read; + const unsigned char* source = (const unsigned char*)tmpBuffer; + while (dest != end) { + *dest = *source; + ++dest; + ++source; + } + + aCount -= read; + bytesRead += read; } MOZ_ASSERT(size.value() == oldLen + bytesRead);