Re: [Mesa-dev] [PATCH] mesa: Don't write to user buffer in glGetTexParameterIuiv on error

2018-03-08 Thread Matt Turner
Reviewed-by: Matt Turner 
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] mesa: Don't write to user buffer in glGetTexParameterIuiv on error

2018-03-08 Thread Ian Romanick
From: Ian Romanick 

With some sets of optimization flags, GCC will generate warnings like
this:

src/mesa/main/texparam.c:2327:27: warning: ‘*((void *)+12)’ may be used 
uninitialized in this function [-Wmaybe-uninitialized]
 params[3] = ip[3];
 ~~^~~
src/mesa/main/texparam.c:2320:16: note: ‘*((void *)+12)’ was declared here
  GLint ip[4];
^~

ip is not initialized in cases where a GL error is generated.  In these
cases, we should *not* write to the user's buffer, so this is actually a
bug.  I wrote a new piglit test gl-3.0-texparameteri to show this bug.

I suspect that Coverity also detected this, but the scan site is
currently down.

Fixes: c2c507786 "main: Added entry points for glGetTextureParameteriv, Iiv, 
and Iuiv."
Signed-off-by: Ian Romanick 
---
 src/mesa/main/texparam.c | 28 ++--
 1 file changed, 2 insertions(+), 26 deletions(-)

diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
index 7cc9d9e..301407e 100644
--- a/src/mesa/main/texparam.c
+++ b/src/mesa/main/texparam.c
@@ -2306,30 +2306,6 @@ get_tex_parameterIiv(struct gl_context *ctx,
}
 }
 
-static void
-get_tex_parameterIuiv(struct gl_context *ctx,
-  struct gl_texture_object *obj,
-  GLenum pname, GLuint *params, bool dsa)
-{
-   switch (pname) {
-   case GL_TEXTURE_BORDER_COLOR:
-  COPY_4V(params, obj->Sampler.BorderColor.i);
-  break;
-   default:
-  {
- GLint ip[4];
- get_tex_parameteriv(ctx, obj, pname, ip, dsa);
- params[0] = ip[0];
- if (pname == GL_TEXTURE_SWIZZLE_RGBA_EXT ||
- pname == GL_TEXTURE_CROP_RECT_OES) {
-params[1] = ip[1];
-params[2] = ip[2];
-params[3] = ip[3];
- }
-  }
-   }
-}
-
 void GLAPIENTRY
 _mesa_GetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
 {
@@ -2382,7 +2358,7 @@ _mesa_GetTexParameterIuiv(GLenum target, GLenum pname, 
GLuint *params)
if (!texObj)
   return;
 
-   get_tex_parameterIuiv(ctx, texObj, pname, params, false);
+   get_tex_parameterIiv(ctx, texObj, pname, (GLint *) params, false);
 }
 
 
@@ -2436,5 +2412,5 @@ _mesa_GetTextureParameterIuiv(GLuint texture, GLenum 
pname, GLuint *params)
if (!texObj)
   return;
 
-   get_tex_parameterIuiv(ctx, texObj, pname, params, true);
+   get_tex_parameterIiv(ctx, texObj, pname, (GLint *) params, true);
 }
-- 
2.9.5

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev