mesa/uniform_query: Don't write to *params if there is an error
authorMatt Turner <mattst88@gmail.com>
Sat, 8 Dec 2012 00:32:30 +0000 (16:32 -0800)
committerMatt Turner <mattst88@gmail.com>
Thu, 13 Dec 2012 17:53:28 +0000 (09:53 -0800)
The GL 3.1 and ES 3.0 specs say of glGetActiveUniformsiv:
   "If an error occurs, nothing will be written to params."

So, make a pass through the indices and check that they're valid before
the pass that actually writes to params. Checking pname happens on the
first iteration of the second loop.

Fixes es3conform's getactiveuniformsiv_for_nonexistent_uniform_indices
test.

NOTE: This is a candidate for the 9.0 branch.
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/main/uniform_query.cpp

index c71577c6ed165f688dba16d818b026fb199b2409..b6b73d16fc978db24ca57b0d3b6e1fb2d3baf710 100644 (file)
@@ -97,12 +97,16 @@ _mesa_GetActiveUniformsiv(GLuint program,
 
    for (i = 0; i < uniformCount; i++) {
       GLuint index = uniformIndices[i];
-      const struct gl_uniform_storage *uni = &shProg->UniformStorage[index];
 
       if (index >= shProg->NumUserUniformStorage) {
         _mesa_error(ctx, GL_INVALID_VALUE, "glGetActiveUniformsiv(index)");
         return;
       }
+   }
+
+   for (i = 0; i < uniformCount; i++) {
+      GLuint index = uniformIndices[i];
+      const struct gl_uniform_storage *uni = &shProg->UniformStorage[index];
 
       switch (pname) {
       case GL_UNIFORM_TYPE: