mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 04:45:45 +00:00
Bug 611647 - Use stringbuffer when creating responseText for XMLHttpRequest, r=bz, a=benjamin
--HG-- extra : rebase_source : ad7ee03e9e6f7fe6e0ecdc9952d3896cbb942960
This commit is contained in:
parent
e0e2698968
commit
eaad6195a8
@ -100,6 +100,7 @@
|
||||
#include "nsIContentSecurityPolicy.h"
|
||||
#include "nsAsyncRedirectVerifyHelper.h"
|
||||
#include "jstypedarray.h"
|
||||
#include "nsStringBuffer.h"
|
||||
|
||||
#define LOAD_STR "load"
|
||||
#define ERROR_STR "error"
|
||||
@ -1174,13 +1175,14 @@ nsXMLHttpRequest::ConvertBodyToText(nsAString& aOutBuffer)
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
PRUnichar * outBuffer =
|
||||
static_cast<PRUnichar*>(nsMemory::Alloc((outBufferLength + 1) *
|
||||
sizeof(PRUnichar)));
|
||||
if (!outBuffer) {
|
||||
nsStringBuffer* buf =
|
||||
nsStringBuffer::Alloc((outBufferLength + 1) * sizeof(PRUnichar));
|
||||
if (!buf) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
PRUnichar* outBuffer = static_cast<PRUnichar*>(buf->Data());
|
||||
|
||||
PRInt32 totalChars = 0,
|
||||
outBufferIndex = 0,
|
||||
outLen = outBufferLength;
|
||||
@ -1212,10 +1214,18 @@ nsXMLHttpRequest::ConvertBodyToText(nsAString& aOutBuffer)
|
||||
}
|
||||
} while ( NS_FAILED(rv) && (dataLen > 0) );
|
||||
|
||||
mResponseBodyUnicode.Assign(outBuffer, totalChars);
|
||||
// Use the string buffer if it is small, or doesn't contain
|
||||
// too much extra data.
|
||||
if (outBufferLength < 127 ||
|
||||
(outBufferLength * 0.9) < totalChars) {
|
||||
outBuffer[totalChars] = PRUnichar(0);
|
||||
// Move ownership to mResponseBodyUnicode.
|
||||
buf->ToString(totalChars, mResponseBodyUnicode, PR_TRUE);
|
||||
} else {
|
||||
mResponseBodyUnicode.Assign(outBuffer, totalChars);
|
||||
buf->Release();
|
||||
}
|
||||
aOutBuffer = mResponseBodyUnicode;
|
||||
nsMemory::Free(outBuffer);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user