Add sanity checks in nsScriptableUConv.cpp

This commit is contained in:
Pale Moon
2018-05-15 23:01:38 +02:00
committed by Roy Tam
parent dab4b4579c
commit 0d5ac5e0a7
+14 -2
View File
@@ -11,6 +11,7 @@
#include "nsIUnicodeDecoder.h"
#include "nsIUnicodeEncoder.h"
#include "mozilla/dom/EncodingUtils.h"
#include "mozilla/CheckedInt.h"
using mozilla::dom::EncodingUtils;
@@ -39,7 +40,12 @@ nsScriptableUnicodeConverter::ConvertFromUnicodeWithLength(const nsAString& aSrc
const nsAFlatString& flatSrc = PromiseFlatString(aSrc);
rv = mEncoder->GetMaxLength(flatSrc.get(), inLength, aOutLen);
if (NS_SUCCEEDED(rv)) {
*_retval = (char*)moz_malloc(*aOutLen+1);
mozilla::CheckedInt<int32_t> needed(*aOutLen);
needed += 1;
if (!needed.isValid()) {
return NS_ERROR_OUT_OF_MEMORY;
}
*_retval = (char*)moz_malloc(needed.value());
if (!*_retval)
return NS_ERROR_OUT_OF_MEMORY;
@@ -151,7 +157,13 @@ nsScriptableUnicodeConverter::ConvertFromByteArray(const uint8_t* aData,
inLength, &outLength);
if (NS_SUCCEEDED(rv))
{
char16_t* buf = (char16_t*)moz_malloc((outLength+1)*sizeof(char16_t));
mozilla::CheckedInt<nsACString::size_type> needed(outLength);
needed += 1;
needed *= sizeof(char16_t);
if (!needed.isValid()) {
return NS_ERROR_OUT_OF_MEMORY;
}
char16_t* buf = (char16_t*)moz_malloc(needed.value());
if (!buf)
return NS_ERROR_OUT_OF_MEMORY;