[Mesa-dev] [PATCH shader-db] run: don't use alloca to avoid random crashes in the GLSL compiler

Marek Olšák maraeo at gmail.com
Wed Dec 7 17:33:17 UTC 2016


From: Marek Olšák <marek.olsak at amd.com>

---
 run.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/run.c b/run.c
index 08fd543..ded224a 100644
--- a/run.c
+++ b/run.c
@@ -656,28 +656,32 @@ main(int argc, char **argv)
 
             /* If there's only one GLSL shader, mark it separable so
              * inputs and outputs aren't eliminated.
              */
             if (num_shaders == 1 && type != TYPE_VP && type != TYPE_FP)
                 use_separate_shader_objects = true;
 
             if (use_separate_shader_objects) {
                 for (unsigned i = 0; i < num_shaders; i++) {
                     const char *const_text;
-                    char *text = alloca(shader[i].length + 1);
+                    unsigned size = shader[i].length + 1000;
+                    /* Using alloca crashes in the GLSL compiler.  */
+                    char *text = malloc(size);
+                    memset(text, 0, size);
 
                     /* Make it zero-terminated. */
                     memcpy(text, shader[i].text, shader[i].length);
                     text[shader[i].length] = 0;
 
                     const_text = text;
                     glCreateShaderProgramv(shader[i].type, 1, &const_text);
+                    free(text);
                 }
             } else if (type == TYPE_CORE || type == TYPE_COMPAT) {
                 GLuint prog = glCreateProgram();
 
                 for (unsigned i = 0; i < num_shaders; i++) {
                     GLuint s = glCreateShader(shader[i].type);
                     glShaderSource(s, 1, &shader[i].text, &shader[i].length);
                     glCompileShader(s);
 
                     GLint param;
-- 
2.7.4



More information about the mesa-dev mailing list