[Mesa-dev] [PATCH] mesa: add back glGetnUniformfv() overflow error reporting
nobled
nobled at dreamwidth.org
Mon Jan 16 15:52:51 PST 2012
ping?
On Thu, Dec 22, 2011 at 4:34 PM, nobled at dreamwidth.org wrote:
> The error was erroneously removed in this commit:
>
> 719909698c67c287a393d2380278e7b7495ae018
> "mesa: Rewrite the way uniforms are tracked and handled"
>
> You also aren't even supposed to truncate the output to 'bufSize',
> so just return like before.
>
> Also fixup an old comment and add an assert.
> ---
> (This function has a random mixture of tabs+spaces and pure spaces for
> indentation, so I had no idea which style to use...)
>
> src/mesa/main/uniform_query.cpp | 16 ++++++++++++----
> src/mesa/main/uniforms.c | 2 +-
> 2 files changed, 13 insertions(+), 5 deletions(-)
>
> diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
> index 33ba53c..8e58fc0 100644
> --- a/src/mesa/main/uniform_query.cpp
> +++ b/src/mesa/main/uniform_query.cpp
> @@ -203,10 +203,18 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint
> program, GLint location,
> const union gl_constant_value *const src =
> &uni->storage[offset * elements];
>
> - unsigned bytes = sizeof(uni->storage[0]) * elements;
> - if (bytes > (unsigned) bufSize) {
> - elements = bufSize / sizeof(uni->storage[0]);
> - bytes = bufSize;
> + assert(returnType == GLSL_TYPE_FLOAT || returnType == GLSL_TYPE_INT ||
> + returnType == GLSL_TYPE_UINT);
> + /* The three (currently) supported types all have the same size,
> + * which is of course the same as their union. That'll change
> + * with glGetUniformdv()...
> + */
> + unsigned bytes = sizeof(src[0]) * elements;
> + if (bufSize < 0 || bytes > (unsigned) bufSize) {
> + _mesa_error( ctx, GL_INVALID_OPERATION,
> + "glGetnUniformfvARB(out of bounds: bufSize is %d,"
> + " but %u bytes are required)", bufSize, bytes );
> + return;
> }
>
> /* If the return type and the uniform's native type are "compatible,"
> diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c
> index 685c0f1..981874e 100644
> --- a/src/mesa/main/uniforms.c
> +++ b/src/mesa/main/uniforms.c
> @@ -478,7 +478,7 @@ _mesa_GetnUniformdvARB(GLhandleARB program, GLint location,
> (void) params;
>
> /*
> - _mesa_get_uniform(ctx, program, location, bufSize, GL_DOUBLE, params);
> + _mesa_get_uniform(ctx, program, location, bufSize,
> GLSL_TYPE_DOUBLE, params);
> */
> _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformdvARB"
> "(GL_ARB_gpu_shader_fp64 not implemented)");
> --
> 1.7.4.1
More information about the mesa-dev
mailing list