glsl: Fix memory error when creating the supported version string.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 1 Feb 2011 08:20:01 +0000 (00:20 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 1 Feb 2011 08:20:01 +0000 (00:20 -0800)
Passing ralloc_vasprintf_append a 0-byte allocation doesn't work.  If
passed a non-NULL argument, ralloc calls strlen to find the end of the
string.  Since there's no terminating '\0', it runs off the end.

Fixes a crash introduced in 14880a510a1a288df0778395097d5a52806abfb0.

src/glsl/glsl_parser_extras.cpp

index 2ed8b843a249b0246a4c213236ac947fd0ad13c2..1fa209c03c1f7ec85797e3618d98f6b5b92099bc 100644 (file)
@@ -97,7 +97,7 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *ctx,
       ? 100 : 110;
    const unsigned highest_version =
       (ctx->API == API_OPENGL) ? ctx->Const.GLSLVersion : 100;
-   char *supported = (char *) ralloc_context(this);
+   char *supported = ralloc_strdup(this, "");
 
    for (unsigned ver = lowest_version; ver <= highest_version; ver += 10) {
       const char *const prefix = (ver == lowest_version)