Commit 61435667 by Alexis Hetu Committed by Alexis Hétu

Added missing validation to CopyBufferSubData

Missing validation for mapped buffers and overlap was added to CopyBufferSubData. Change-Id: If1f3f9901f039f5737d41ca46d98ce4c188274d6 Reviewed-on: https://swiftshader-review.googlesource.com/3603Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent dafae035
...@@ -2661,22 +2661,23 @@ GL_APICALL void GL_APIENTRY glCopyBufferSubData(GLenum readTarget, GLenum writeT ...@@ -2661,22 +2661,23 @@ GL_APICALL void GL_APIENTRY glCopyBufferSubData(GLenum readTarget, GLenum writeT
if(context) if(context)
{ {
es2::Buffer *readBuffer = nullptr; es2::Buffer *readBuffer = nullptr, *writeBuffer = nullptr;
if(!context->getBuffer(readTarget, &readBuffer)) if(!context->getBuffer(readTarget, &readBuffer) || !context->getBuffer(writeTarget, &writeBuffer))
{ {
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
} }
if(static_cast<size_t>(readOffset + size) > readBuffer->size()) if(!readBuffer || readBuffer->isMapped() || !writeBuffer || writeBuffer->isMapped())
{ {
return error(GL_INVALID_VALUE); return error(GL_INVALID_OPERATION);
} }
if((readBuffer == writeBuffer) && // If same buffer, check for overlap
es2::Buffer *writeBuffer = nullptr; ((readOffset >= writeOffset) && (readOffset < (writeOffset + size)) ||
if(!context->getBuffer(writeTarget, &writeBuffer)) (writeOffset >= readOffset) && (writeOffset < (readOffset + size))))
{ {
return error(GL_INVALID_ENUM); return error(GL_INVALID_VALUE);
} }
if(static_cast<size_t>(writeOffset + size) > writeBuffer->size()) if((static_cast<size_t>(readOffset + size) > readBuffer->size()) ||
(static_cast<size_t>(writeOffset + size) > writeBuffer->size()))
{ {
return error(GL_INVALID_VALUE); return error(GL_INVALID_VALUE);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment