Add size checks to WebGLContext::BufferData().

This commit is contained in:
Fedor 2019-11-12 08:47:56 +03:00
parent b559809cbc
commit 86ef42f705

View File

@ -9,6 +9,8 @@
#include "WebGLBuffer.h"
#include "WebGLVertexArray.h"
#include "mozilla/CheckedInt.h"
namespace mozilla {
WebGLRefPtr<WebGLBuffer>*
@ -345,6 +347,16 @@ WebGLContext::BufferData(GLenum target, WebGLsizeiptr size, GLenum usage)
////
const auto checkedSize = CheckedInt<size_t>(size);
if (!checkedSize.isValid())
return ErrorOutOfMemory("%s: Size too large for platform.", funcName);
#if defined(XP_MACOSX)
if (gl->WorkAroundDriverBugs() && size > 1200000000) {
return ErrorOutOfMemory("Allocations larger than 1200000000 fail on MacOS.");
}
#endif
const UniqueBuffer zeroBuffer(calloc(size, 1));
if (!zeroBuffer)
return ErrorOutOfMemory("%s: Failed to allocate zeros.", funcName);