From def0030e64dd3a4eb3487dd40bf64b9a71a70af3 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Wed, 7 Mar 2018 21:05:34 -0800 Subject: [PATCH] mesa: Don't write to user buffer in glGetTexParameterIuiv on error MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit With some sets of optimization flags, GCC will generate warnings like this: src/mesa/main/texparam.c:2327:27: warning: ‘*((void *)&ip+12)’ may be used uninitialized in this function [-Wmaybe-uninitialized] params[3] = ip[3]; ~~^~~ src/mesa/main/texparam.c:2320:16: note: ‘*((void *)&ip+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 Reviewed-by: Matt Turner --- 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 7cc9d9e8faa..301407e7384 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.30.2