Mesa (master): glsl: fix segfault in linker when vertex or fragment shader was missing

Brian Paul brianp at kemper.freedesktop.org
Thu Apr 2 17:16:26 UTC 2009


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

Author: Brian Paul <brianp at vmware.com>
Date:   Thu Apr  2 11:15:53 2009 -0600

glsl: fix segfault in linker when vertex or fragment shader was missing

---

 src/mesa/shader/slang/slang_link.c |   23 ++++++++++++++---------
 1 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/mesa/shader/slang/slang_link.c b/src/mesa/shader/slang/slang_link.c
index e2daf72..1fdf4db 100644
--- a/src/mesa/shader/slang/slang_link.c
+++ b/src/mesa/shader/slang/slang_link.c
@@ -562,6 +562,9 @@ concat_shaders(struct gl_shader_program *shProg, GLenum shaderType)
       }
    }
 
+   if (totalLen == 0)
+      return NULL;
+
    source = (GLchar *) _mesa_malloc(totalLen + 1);
    if (!source)
       return NULL;
@@ -620,14 +623,16 @@ get_main_shader(GLcontext *ctx,
     */
    shader = concat_shaders(shProg, type);
 
-   _slang_compile(ctx, shader);
+   if (shader) {
+      _slang_compile(ctx, shader);
 
-   /* Finally, check if recompiling failed */
-   if (!shader->CompileStatus ||
-       !shader->Main ||
-       shader->UnresolvedRefs) {
-      link_error(shProg, "Unresolved symbols");
-      return NULL;
+      /* Finally, check if recompiling failed */
+      if (!shader->CompileStatus ||
+          !shader->Main ||
+          shader->UnresolvedRefs) {
+         link_error(shProg, "Unresolved symbols");
+         return NULL;
+      }
    }
 
    return shader;
@@ -650,8 +655,8 @@ _slang_link(GLcontext *ctx,
             GLhandleARB programObj,
             struct gl_shader_program *shProg)
 {
-   const struct gl_vertex_program *vertProg;
-   const struct gl_fragment_program *fragProg;
+   const struct gl_vertex_program *vertProg = NULL;
+   const struct gl_fragment_program *fragProg = NULL;
    GLuint numSamplers = 0;
    GLuint i;
 




More information about the mesa-commit mailing list