Bug 1423461 - Report the right size to the OOM handler for moz_xcalloc. r?njn
--- a/memory/mozalloc/mozalloc.cpp
+++ b/memory/mozalloc/mozalloc.cpp
@@ -54,16 +54,17 @@ MOZ_MEMORY_API char *strndup_impl(const
#include <errno.h>
#include <new> // for std::bad_alloc
#include <string.h>
#include <sys/types.h>
#include "mozilla/Assertions.h"
+#include "mozilla/CheckedInt.h"
#include "mozilla/Likely.h"
#include "mozilla/mozalloc.h"
#include "mozilla/mozalloc_oom.h" // for mozalloc_handle_oom
void*
moz_xmalloc(size_t size)
{
void* ptr = malloc_impl(size);
@@ -74,17 +75,18 @@ moz_xmalloc(size_t size)
return ptr;
}
void*
moz_xcalloc(size_t nmemb, size_t size)
{
void* ptr = calloc_impl(nmemb, size);
if (MOZ_UNLIKELY(!ptr && nmemb && size)) {
- mozalloc_handle_oom(size);
+ mozilla::CheckedInt<size_t> totalSize = mozilla::CheckedInt<size_t>(nmemb) * size;
+ mozalloc_handle_oom(totalSize.isValid() ? totalSize.value() : SIZE_MAX);
return moz_xcalloc(nmemb, size);
}
return ptr;
}
void*
moz_xrealloc(void* ptr, size_t size)
{