diff --git a/mozilla/htmlparser/src/nsExpatTokenizer.cpp b/mozilla/htmlparser/src/nsExpatTokenizer.cpp
index 89e3a92414e..19f8ec538a4 100644
--- a/mozilla/htmlparser/src/nsExpatTokenizer.cpp
+++ b/mozilla/htmlparser/src/nsExpatTokenizer.cpp
@@ -557,17 +557,26 @@ nsresult nsExpatTokenizer::LoadStream(nsIInputStream* in,
if (NS_FAILED(res)) return res;
PRUint32 aReadCount = 0;
- uniBuf = (PRUnichar *) PR_Malloc(bufsize);
+ PRUnichar *aBuf = (PRUnichar *) PR_Malloc(bufsize);
- while (NS_OK == (res=uniIn->Read(uniBuf, retLen, aCount, &aReadCount))) {
- retLen += aReadCount;
+ while (NS_OK == (res=uniIn->Read(aBuf, retLen, aCount, &aReadCount))) {
+ retLen += aReadCount;
+#if 1
+ bufsize += aCount * sizeof(PRUnichar);
+ aBuf = (PRUnichar *) PR_Realloc(aBuf, bufsize);
+#else
if (((aReadCount+32) >= aCount) &&
- ((retLen+aCount) >= bufsize)) {
+ ((retLen+aCount) * sizeof(PRUnichar) >= bufsize)) {
- bufsize += aCount;
+ bufsize += aCount * sizeof(PRUnichar);
uniBuf = (PRUnichar *) PR_Realloc(uniBuf, bufsize*sizeof(PRUnichar));
}
+#endif
}/* while */
+ uniBuf = (PRUnichar *) PR_Malloc(retLen*sizeof(PRUnichar));
+ nsCRT::memcpy(uniBuf, aBuf, sizeof(PRUnichar) * retLen);
+ PR_FREEIF(aBuf);
+
if (NS_BASE_STREAM_EOF == res)
res = NS_OK;
return res;
diff --git a/mozilla/parser/htmlparser/src/nsExpatTokenizer.cpp b/mozilla/parser/htmlparser/src/nsExpatTokenizer.cpp
index 89e3a92414e..19f8ec538a4 100644
--- a/mozilla/parser/htmlparser/src/nsExpatTokenizer.cpp
+++ b/mozilla/parser/htmlparser/src/nsExpatTokenizer.cpp
@@ -557,17 +557,26 @@ nsresult nsExpatTokenizer::LoadStream(nsIInputStream* in,
if (NS_FAILED(res)) return res;
PRUint32 aReadCount = 0;
- uniBuf = (PRUnichar *) PR_Malloc(bufsize);
+ PRUnichar *aBuf = (PRUnichar *) PR_Malloc(bufsize);
- while (NS_OK == (res=uniIn->Read(uniBuf, retLen, aCount, &aReadCount))) {
- retLen += aReadCount;
+ while (NS_OK == (res=uniIn->Read(aBuf, retLen, aCount, &aReadCount))) {
+ retLen += aReadCount;
+#if 1
+ bufsize += aCount * sizeof(PRUnichar);
+ aBuf = (PRUnichar *) PR_Realloc(aBuf, bufsize);
+#else
if (((aReadCount+32) >= aCount) &&
- ((retLen+aCount) >= bufsize)) {
+ ((retLen+aCount) * sizeof(PRUnichar) >= bufsize)) {
- bufsize += aCount;
+ bufsize += aCount * sizeof(PRUnichar);
uniBuf = (PRUnichar *) PR_Realloc(uniBuf, bufsize*sizeof(PRUnichar));
}
+#endif
}/* while */
+ uniBuf = (PRUnichar *) PR_Malloc(retLen*sizeof(PRUnichar));
+ nsCRT::memcpy(uniBuf, aBuf, sizeof(PRUnichar) * retLen);
+ PR_FREEIF(aBuf);
+
if (NS_BASE_STREAM_EOF == res)
res = NS_OK;
return res;