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
if(context)
{
es2::Buffer *readBuffer = nullptr;
if(!context->getBuffer(readTarget, &readBuffer))
es2::Buffer *readBuffer = nullptr, *writeBuffer = nullptr;
if(!context->getBuffer(readTarget, &readBuffer) || !context->getBuffer(writeTarget, &writeBuffer))
{
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);
}
es2::Buffer *writeBuffer = nullptr;
if(!context->getBuffer(writeTarget, &writeBuffer))
if((readBuffer == writeBuffer) && // If same buffer, check for overlap
((readOffset >= writeOffset) && (readOffset < (writeOffset + size)) ||
(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);
}
......
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