]> git.saurik.com Git - bison.git/commitdiff
* tests/glr-regression.at
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 8 Dec 2005 06:52:43 +0000 (06:52 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 8 Dec 2005 06:52:43 +0000 (06:52 +0000)
(Improper handling of embedded actions and dollar(-N) in GLR parsers):
Close memory leak reported by twlevo.

ChangeLog
tests/glr-regression.at

index 4d4a920c3b8916e390000d2dcf1bf1fd1cfef12e..474cc80c28494cc634bad99b36b3993af248d9e9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-12-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * tests/glr-regression.at
+       (Improper handling of embedded actions and dollar(-N) in GLR parsers):
+       Close memory leak reported by twlevo.
+
 2005-12-06  "Joel E. Denny" <jdenny@ces.clemson.edu>
 
        * data/glr.c (yyprocessOneStack, yyparse): Synchronize the shift for
 2005-12-06  "Joel E. Denny" <jdenny@ces.clemson.edu>
 
        * data/glr.c (yyprocessOneStack, yyparse): Synchronize the shift for
index e3bdd26b57c9f0a4ed985c3953b3c022b12cc83e..abaec70371767591c1df5177b4c5aeb15e96f8cc 100644 (file)
@@ -120,7 +120,7 @@ AT_DATA_GRAMMAR([glr-regr2a.y],
 /* Reported by S. Eken */
 
 %{
 /* Reported by S. Eken */
 
 %{
-  #define YYSTYPE char const *
+  #define YYSTYPE char *
 
   #include <ctype.h>
   #include <stdio.h>
 
   #include <ctype.h>
   #include <stdio.h>
@@ -138,9 +138,11 @@ command:
     's' var 't'
        { printf ("Variable: '%s'\n", $2); }
     'v' 'x' 'q'
     's' var 't'
        { printf ("Variable: '%s'\n", $2); }
     'v' 'x' 'q'
+       { free ($2); }
   | 's' var_list 't' 'e'
   | 's' var_list 't' 'e'
-       { printf ("Varlist: '%s'\n", $2); }
+       { printf ("Varlist: '%s'\n", $2); free ($2); }
   | 's' var 't' var_printer 'x'
   | 's' var 't' var_printer 'x'
+       { free ($2); }
   ;
 
 var:
   ;
 
 var:
@@ -153,10 +155,10 @@ var_list:
     { $$ = $1; }
   | var ',' var_list
     {
     { $$ = $1; }
   | var ',' var_list
     {
-      char *s = (char *) malloc (strlen ($1) + 1 + strlen ($3) + 1);
-      strcpy (s, $1);
+      char *s = (char *) realloc ($1, strlen ($1) + 1 + strlen ($3) + 1);
       strcat (s, ",");
       strcat (s, $3);
       strcat (s, ",");
       strcat (s, $3);
+      free ($3);
       $$ = s;
     }
   ;
       $$ = s;
     }
   ;