mesa: validate size parameters for glTexStorage*Multisample
authorTapani Pälli <tapani.palli@intel.com>
Mon, 17 Aug 2015 07:14:35 +0000 (10:14 +0300)
committerTapani Pälli <tapani.palli@intel.com>
Wed, 19 Aug 2015 04:25:42 +0000 (07:25 +0300)
v2: code cleanup
v3: check only dimensions, samples is checked separately later

Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Timothy Arceri <t_arceri@yahoo.com.au>
src/mesa/main/teximage.c

index 8b2f32ad973f403ca25fd73c0498417deb73b2d7..253e8810b8602a99e9b28c43c7b51f21da85e333 100644 (file)
@@ -5794,6 +5794,20 @@ _mesa_TexImage3DMultisample(GLenum target, GLsizei samples,
                              "glTexImage3DMultisample");
 }
 
+static bool
+valid_texstorage_ms_parameters(GLsizei width, GLsizei height, GLsizei depth,
+                               GLsizei samples, unsigned dims)
+{
+   GET_CURRENT_CONTEXT(ctx);
+
+   if (!_mesa_valid_tex_storage_dim(width, height, depth)) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glTexStorage%uDMultisample(width=%d,height=%d,depth=%d)",
+                  dims, width, height, depth);
+      return false;
+   }
+   return true;
+}
 
 void GLAPIENTRY
 _mesa_TexStorage2DMultisample(GLenum target, GLsizei samples,
@@ -5807,6 +5821,9 @@ _mesa_TexStorage2DMultisample(GLenum target, GLsizei samples,
    if (!texObj)
       return;
 
+   if (!valid_texstorage_ms_parameters(width, height, 1, samples, 2))
+      return;
+
    texture_image_multisample(ctx, 2, texObj, target, samples,
                              internalformat, width, height, 1,
                              fixedsamplelocations, GL_TRUE,
@@ -5826,6 +5843,9 @@ _mesa_TexStorage3DMultisample(GLenum target, GLsizei samples,
    if (!texObj)
       return;
 
+   if (!valid_texstorage_ms_parameters(width, height, depth, samples, 3))
+      return;
+
    texture_image_multisample(ctx, 3, texObj, target, samples,
                              internalformat, width, height, depth,
                              fixedsamplelocations, GL_TRUE,
@@ -5846,6 +5866,9 @@ _mesa_TextureStorage2DMultisample(GLuint texture, GLsizei samples,
    if (!texObj)
       return;
 
+   if (!valid_texstorage_ms_parameters(width, height, 1, samples, 2))
+      return;
+
    texture_image_multisample(ctx, 2, texObj, texObj->Target, samples,
                              internalformat, width, height, 1,
                              fixedsamplelocations, GL_TRUE,
@@ -5867,6 +5890,9 @@ _mesa_TextureStorage3DMultisample(GLuint texture, GLsizei samples,
    if (!texObj)
       return;
 
+   if (!valid_texstorage_ms_parameters(width, height, depth, samples, 3))
+      return;
+
    texture_image_multisample(ctx, 3, texObj, texObj->Target, samples,
                              internalformat, width, height, depth,
                              fixedsamplelocations, GL_TRUE,