From d21c8e1bed06b4e525d0209e532f295b0812854b Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Thu, 17 Jul 2025 12:37:44 +0200 Subject: [PATCH] bufferobj: init the return value for GetParam functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It's helping buggy applications that may use the returned value without checking for an error first. For instance, viewperf20/maya uses a sequence like this: glGenBuffers(n = 1, buffers = &3458) ... glGetNamedBufferParameteriv(3458, GL_BUFFER_SIZE, &p) Since 3458 isn't associated to an object yet, _mesa_lookup_bufferobj_err will return NULL, leaving 'p' with its original value. It seems to randomly trigger an exit from the benchmark, presumably because the content in 'p' is random (for instance -1879044180). Cc: mesa-stable Reviewed-by: Marek Olšák Part-of: --- src/mesa/main/bufferobj.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index d4081fb16d4..c8280e8de6d 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -3162,6 +3162,8 @@ _mesa_GetBufferParameteriv(GLenum target, GLenum pname, GLint *params) struct gl_buffer_object *bufObj; GLint64 parameter; + *params = 0; + bufObj = get_buffer(ctx, "glGetBufferParameteriv", target, GL_INVALID_OPERATION); if (!bufObj) @@ -3181,6 +3183,8 @@ _mesa_GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params) struct gl_buffer_object *bufObj; GLint64 parameter; + *params = 0; + bufObj = get_buffer(ctx, "glGetBufferParameteri64v", target, GL_INVALID_OPERATION); if (!bufObj) @@ -3200,6 +3204,8 @@ _mesa_GetNamedBufferParameteriv(GLuint buffer, GLenum pname, GLint *params) struct gl_buffer_object *bufObj; GLint64 parameter; + *params = 0; + bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glGetNamedBufferParameteriv"); if (!bufObj) @@ -3219,6 +3225,8 @@ _mesa_GetNamedBufferParameterivEXT(GLuint buffer, GLenum pname, GLint *params) struct gl_buffer_object *bufObj; GLint64 parameter; + *params = 0; + if (!buffer) { _mesa_error(ctx, GL_INVALID_OPERATION, "glGetNamedBufferParameterivEXT: buffer=0"); @@ -3245,6 +3253,8 @@ _mesa_GetNamedBufferParameteri64v(GLuint buffer, GLenum pname, struct gl_buffer_object *bufObj; GLint64 parameter; + *params = 0; + bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glGetNamedBufferParameteri64v"); if (!bufObj)