Commit f330190f by Nicolas Capens

Fix validation of texture level.

Early out checks for zero size were skipping the validation. Change-Id: I1d8173146117be5a7a3330cf6eae46c2ef8231ff Reviewed-on: https://swiftshader-review.googlesource.com/5093Tested-by: 's avatarNicolas Capens <capn@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 0637eac3
......@@ -703,7 +703,12 @@ void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLs
"GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, const GLvoid* data = %p)",
target, level, internalformat, width, height, border, imageSize, data);
if(!validImageSize(level, width, height) || border != 0 || imageSize < 0)
if(level < 0 || level >= es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
if(!validImageSize(level, width, height) || imageSize < 0)
{
return error(GL_INVALID_VALUE);
}
......@@ -737,11 +742,6 @@ void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLs
if(context)
{
if(level > es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
switch(target)
{
case GL_TEXTURE_2D:
......@@ -788,6 +788,11 @@ void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yo
return error(GL_INVALID_ENUM);
}
if(level < 0 || level >= es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
if(xoffset < 0 || yoffset < 0 || !validImageSize(level, width, height) || imageSize < 0)
{
return error(GL_INVALID_VALUE);
......@@ -808,7 +813,7 @@ void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yo
return error(GL_INVALID_ENUM);
}
if(width == 0 || height == 0 || data == NULL)
if(width == 0 || height == 0 || !data)
{
return;
}
......@@ -817,11 +822,6 @@ void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yo
if(context)
{
if(level > es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
if(imageSize != egl::ComputeCompressedSize(width, height, format))
{
return error(GL_INVALID_VALUE);
......@@ -972,7 +972,12 @@ void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
return error(GL_INVALID_ENUM);
}
if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)
if(level < 0 || level >= es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
if(xoffset < 0 || yoffset < 0 || width < 0 || height < 0)
{
return error(GL_INVALID_VALUE);
}
......@@ -991,10 +996,6 @@ void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
if(context)
{
if(level > es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
es1::Framebuffer *framebuffer = context->getFramebuffer();
......@@ -4517,7 +4518,12 @@ void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLs
return error(GL_INVALID_ENUM);
}
if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)
if(level < 0 || level >= es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
if(xoffset < 0 || yoffset < 0 || width < 0 || height < 0)
{
return error(GL_INVALID_VALUE);
}
......@@ -4532,7 +4538,7 @@ void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLs
return error(GL_INVALID_ENUM);
}
if(width == 0 || height == 0 || pixels == NULL)
if(width == 0 || height == 0 || !pixels)
{
return;
}
......@@ -4541,11 +4547,6 @@ void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLs
if(context)
{
if(level > es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
if(target == GL_TEXTURE_2D)
{
es1::Texture2D *texture = context->getTexture2D();
......
......@@ -1013,6 +1013,11 @@ void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yo
return error(GL_INVALID_ENUM);
}
if(level < 0 || level >= es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
if(xoffset < 0 || yoffset < 0 || !validImageSize(level, width, height) || imageSize < 0)
{
return error(GL_INVALID_VALUE);
......@@ -1024,7 +1029,7 @@ void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yo
return error(validationError);
}
if(width == 0 || height == 0 || data == NULL)
if(width == 0 || height == 0 || !data)
{
return;
}
......@@ -1033,11 +1038,6 @@ void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yo
if(context)
{
if(level >= es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
if(imageSize != egl::ComputeCompressedSize(width, height, format))
{
return error(GL_INVALID_VALUE);
......@@ -1193,7 +1193,12 @@ void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
return error(GL_INVALID_ENUM);
}
if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)
if(level < 0 || level >= es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
if(xoffset < 0 || yoffset < 0 || width < 0 || height < 0)
{
return error(GL_INVALID_VALUE);
}
......@@ -1212,11 +1217,6 @@ void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
if(context)
{
if(level >= es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
es2::Framebuffer *framebuffer = context->getReadFramebuffer();
if(framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE)
......@@ -1231,7 +1231,7 @@ void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
return error(GL_INVALID_OPERATION);
}
es2::Texture *texture = NULL;
es2::Texture *texture = nullptr;
if(target == GL_TEXTURE_2D)
{
......@@ -6207,7 +6207,12 @@ void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLs
return error(GL_INVALID_ENUM);
}
if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)
if(level < 0 || level >= es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
if(xoffset < 0 || yoffset < 0 || width < 0 || height < 0)
{
return error(GL_INVALID_VALUE);
}
......@@ -6222,7 +6227,7 @@ void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLs
return error(GL_INVALID_ENUM);
}
if(width == 0 || height == 0 || pixels == NULL)
if(width == 0 || height == 0 || !pixels)
{
return;
}
......@@ -6231,11 +6236,6 @@ void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLs
if(context)
{
if(level >= es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
GLenum sizedInternalFormat = GetSizedInternalFormat(format, type);
if(target == GL_TEXTURE_2D)
......@@ -7263,6 +7263,11 @@ void CompressedTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint
return error(GL_INVALID_ENUM);
}
if(level < 0 || level >= es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
if(xoffset < 0 || yoffset < 0 || zoffset < 0 || !validImageSize(level, width, height) || depth < 0 || imageSize < 0)
{
return error(GL_INVALID_VALUE);
......@@ -7274,7 +7279,7 @@ void CompressedTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint
return error(validationError);
}
if(width == 0 || height == 0 || depth == 0 || data == NULL)
if(width == 0 || height == 0 || depth == 0 || !data)
{
return;
}
......
......@@ -870,6 +870,11 @@ GL_APICALL void GL_APIENTRY glCompressedTexSubImage3D(GLenum target, GLint level
return error(GL_INVALID_ENUM);
}
if(level < 0 || level >= es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
return error(GL_INVALID_VALUE);
}
if(xoffset < 0 || yoffset < 0 || zoffset < 0 || !validImageSize(level, width, height) || depth < 0 || imageSize < 0)
{
return error(GL_INVALID_VALUE);
......@@ -881,7 +886,7 @@ GL_APICALL void GL_APIENTRY glCompressedTexSubImage3D(GLenum target, GLint level
return error(validationError);
}
if(width == 0 || height == 0 || depth == 0 || data == NULL)
if(width == 0 || height == 0 || depth == 0 || !data)
{
return;
}
......
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