Mmh, this can still crash if location is < -1 or greater than the number of uniforms. How about:

struct gl_uniform_storage *uni = NULL;
if (_mesa_is_no_error_enabled(ctx)) {
  if (location >= 0 && location < shProg->NumUniformRemapTable)
    uni = shProg->UniformRemapTable[location];
  if (!uni)
    return;
  ...
} else {
  ...
}

On 05/13/2017 08:31 AM, Timothy Arceri wrote:
---
  src/mesa/main/uniform_query.cpp | 3 +++
  1 file changed, 3 insertions(+)

diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index 0e02a76..5f38aa5 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -904,20 +904,23 @@ validate_uniform(GLint location, GLsizei count, const 
GLvoid *values,
  extern "C" void
  _mesa_uniform(GLint location, GLsizei count, const GLvoid *values,
                struct gl_context *ctx, struct gl_shader_program *shProg,
                enum glsl_base_type basicType, unsigned src_components)
  {
     unsigned offset;
     int size_mul = glsl_base_type_is_64bit(basicType) ? 2 : 1;
struct gl_uniform_storage *uni;
     if (_mesa_is_no_error_enabled(ctx)) {
+      if (location == -1)
+         return;
+
        uni = shProg->UniformRemapTable[location];
/* The array index specified by the uniform location is just the
         * uniform location minus the base location of of the uniform.
         */
        assert(uni->array_elements > 0 || location == (int)uni->remap_location);
        offset = location - uni->remap_location;
     } else {
        uni = validate_uniform(location, count, values, &offset, ctx, shProg,
                               basicType, src_components);

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to