зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1178033 - XDRBuffer: Replace isUint32Overflow by a simple check of the capacity max. r=luke
This commit is contained in:
Родитель
b152e40aeb
Коммит
3969a194bd
|
@ -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:
|
||||
|
|
Загрузка…
Ссылка в новой задаче