Revert "ARB prog parser: Fix epic memory leak in lexer / parser interface"
[mesa.git] / src / mesa / shader / program_parse.tab.c
index 261b605a2d256e706af722e791fa5a74e7e10989..c255e912ed238c0778bcf44ac16e10a06712f344 100644 (file)
@@ -4565,7 +4565,7 @@ yyreduce:
                      "undefined variable binding in ALIAS statement");
              YYERROR;
           } else {
-             _mesa_symbol_table_add_symbol(state->st, 0, strdup((yyvsp[(2) - (4)].string)), target);
+             _mesa_symbol_table_add_symbol(state->st, 0, (yyvsp[(2) - (4)].string), target);
           }
        ;}
     break;
@@ -4896,14 +4896,10 @@ declare_variable(struct asm_parser_state *state, char *name, enum asm_type t,
    if (exist != NULL) {
       yyerror(locp, state, "redeclared identifier");
    } else {
-      const size_t name_len = strlen(name);
-
-      s = calloc(1, sizeof(struct asm_symbol) + name_len + 1);
-      s->name = (char *)(s + 1);
+      s = calloc(1, sizeof(struct asm_symbol));
+      s->name = name;
       s->type = t;
 
-      memcpy((char *) s->name, name, name_len + 1);
-
       switch (t) {
       case at_temp:
         if (state->prog->NumTemporaries >= state->limits->MaxTemps) {
@@ -5151,11 +5147,6 @@ _mesa_parse_arb_program(GLcontext *ctx, GLenum target, const GLubyte *str,
    _mesa_memcpy (strz, str, len);
    strz[len] = '\0';
 
-   if (state->prog->String != NULL) {
-      _mesa_free(state->prog->String);
-      state->prog->String = NULL;
-   }
-
    state->prog->String = strz;
 
    state->st = _mesa_symbol_table_ctor();
@@ -5245,6 +5236,7 @@ error:
    for (sym = state->sym; sym != NULL; sym = temp) {
       temp = sym->next;
 
+      _mesa_free((void *) sym->name);
       _mesa_free(sym);
    }
    state->sym = NULL;
@@ -5252,11 +5244,6 @@ error:
    _mesa_symbol_table_dtor(state->st);
    state->st = NULL;
 
-   if (state->string_dumpster != NULL) {
-      _mesa_free(state->string_dumpster);
-      state->dumpster_size = 0;
-   }
-
    return result;
 }