Mesa (master): mesa/uniform_query: Don' t write to *params if there is an error

Matt Turner mattst88 at kemper.freedesktop.org
Thu Dec 13 17:51:35 UTC 2012


Module: Mesa
Branch: master
Commit: 11cea472466f731fa9c44d56f1643dec26e6601c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=11cea472466f731fa9c44d56f1643dec26e6601c

Author: Matt Turner <mattst88 at gmail.com>
Date:   Fri Dec  7 16:32:30 2012 -0800

mesa/uniform_query: Don't write to *params if there is an error

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 at vmware.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/mesa/main/uniform_query.cpp |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index c71577c..b6b73d1 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -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:




More information about the mesa-commit mailing list