Mesa (master): glsl: on UBO/ SSBOs link error reset the number of active blocks to 0

Andres Gomez tanty at kemper.freedesktop.org
Mon Mar 27 10:48:54 UTC 2017


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

Author: Andres Gomez <agomez at igalia.com>
Date:   Wed Feb 22 17:03:22 2017 +0200

glsl: on UBO/SSBOs link error reset the number of active blocks to 0

While it's legal to have an active blocks count > 0 on link failure.
Unless we actually assign memory for the blocks array we can end up
segfaulting in calls such as glUniformBlockBinding().

To avoid having to NULL check these api calls we simply reset the
block count to 0 if the array was not created.

Signed-off-by: Andres Gomez <agomez at igalia.com>
Cc: Timothy Arceri <tarceri at itsqueeze.com>
Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>

---

 src/compiler/glsl/linker.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 3eddbe24d0..f9c226a22c 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -1181,6 +1181,12 @@ interstage_cross_validate_uniform_blocks(struct gl_shader_program *prog,
             for (unsigned k = 0; k <= i; k++) {
                delete[] InterfaceBlockStageIndex[k];
             }
+
+            /* Reset the block count. This will help avoid various segfaults
+             * from api calls that assume the array exists due to the count
+             * being non-zero.
+             */
+            *num_blks = 0;
             return false;
          }
 




More information about the mesa-commit mailing list