aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2018-03-07 21:05:34 -0800
committerIan Romanick <[email protected]>2018-03-12 10:13:30 -0700
commitdef0030e64dd3a4eb3487dd40bf64b9a71a70af3 (patch)
tree28e35cba63adc1b7e363369ac97efe763b9596b7
parentf94597f554d284e8bedf0d00e3ad9e805306548f (diff)
mesa: Don't write to user buffer in glGetTexParameterIuiv on error
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 <[email protected]> Reviewed-by: Matt Turner <[email protected]>
-rw-r--r--src/mesa/main/texparam.c28
1 files 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);
}