Protect against integer overflows in the IndexBuffer class by validating that the new write position will not overflow.
Issue 444
Signed-off-by: Jamie Madil
Signed-off-by: Shannon Woods
Author: Geoff Lang
diff --git a/src/libGLESv2/renderer/IndexBuffer.cpp b/src/libGLESv2/renderer/IndexBuffer.cpp
index 16fd782..3d5d7a7 100644
--- a/src/libGLESv2/renderer/IndexBuffer.cpp
+++ b/src/libGLESv2/renderer/IndexBuffer.cpp
@@ -130,12 +130,13 @@
{
bool result = true;
unsigned int curBufferSize = getBufferSize();
+ unsigned int writePos = getWritePosition();
if (size > curBufferSize)
{
result = setBufferSize(std::max(size, 2 * curBufferSize), indexType);
setWritePosition(0);
}
- else if (getWritePosition() + size > curBufferSize)
+ else if (writePos + size > curBufferSize || writePos + size < writePos)
{
if (!discard())
{