main: fix basename match's check if it's an array or struct
authorSamuel Iglesias Gonsalvez <siglesias@igalia.com>
Tue, 27 Oct 2015 13:21:12 +0000 (14:21 +0100)
committerSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Fri, 30 Oct 2015 07:12:53 +0000 (08:12 +0100)
Commit 4565b6f did not update the basename match's check for
the case that string would exactly match the name of the
variable if the suffix "[0]" were appended to it.

Fixes two dEQP-GLES31 tests:

dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array
dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array_single_element

v2:
- Change the position of rname_has_array_index_zero to avoid an out-of-bounds
  read. Reported by Tapani Pälli.

Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
src/mesa/main/shader_query.cpp

index 59ec3d7f693dac7c26a599c77f0dbc6184868b95..fc0276fafaaee09f32f8ff25fc6dd6acc0e1fec1 100644 (file)
@@ -590,7 +590,8 @@ _mesa_program_resource_find_name(struct gl_shader_program *shProg,
          case GL_UNIFORM_BLOCK:
          case GL_SHADER_STORAGE_BLOCK:
             /* Basename match, check if array or struct. */
-            if (name[baselen] == '\0' ||
+            if (rname_has_array_index_zero ||
+                name[baselen] == '\0' ||
                 name[baselen] == '[' ||
                 name[baselen] == '.') {
                return res;