Bug 1178033 - XDRBuffer: Replace isUint32Overflow by a simple check of the capacity max. r=luke

This commit is contained in:
Nicolas B. Pierron 2015-08-17 10:43:54 +02:00
Родитель b152e40aeb
Коммит 3969a194bd
2 изменённых файлов: 7 добавлений и 8 удалений

Просмотреть файл

@ -30,16 +30,19 @@ XDRBuffer::grow(size_t n)
MOZ_ASSERT(n > size_t(limit - cursor));
const size_t MIN_CAPACITY = 8192;
const size_t MAX_CAPACITY = size_t(INT32_MAX) + 1;
size_t offset = cursor - base;
size_t newCapacity = mozilla::RoundUpPow2(offset + n);
if (newCapacity < MIN_CAPACITY)
newCapacity = MIN_CAPACITY;
if (isUint32Overflow(newCapacity)) {
MOZ_ASSERT(offset <= MAX_CAPACITY);
if (n > MAX_CAPACITY - offset) {
js::gc::AutoSuppressGC suppressGC(cx());
JS_ReportErrorNumber(cx(), GetErrorMessage, nullptr, JSMSG_TOO_BIG_TO_ENCODE);
return false;
}
size_t newCapacity = mozilla::RoundUpPow2(offset + n);
if (newCapacity < MIN_CAPACITY)
newCapacity = MIN_CAPACITY;
MOZ_ASSERT(newCapacity <= MAX_CAPACITY);
void* data = js_realloc(base, newCapacity);
if (!data) {
ReportOutOfMemory(cx());

Просмотреть файл

@ -85,10 +85,6 @@ class XDRBuffer {
return ptr;
}
static bool isUint32Overflow(size_t n) {
return size_t(-1) > size_t(UINT32_MAX) && n > size_t(UINT32_MAX);
}
void freeBuffer();
private: