]> granicus.if.org Git - yasm/commitdiff
Fix directive memory leaks in a different way; the old way broke name/val
authorPeter Johnson <peter@tortall.net>
Thu, 1 Nov 2001 00:24:09 +0000 (00:24 -0000)
committerPeter Johnson <peter@tortall.net>
Thu, 1 Nov 2001 00:24:09 +0000 (00:24 -0000)
splitting.

svn path=/trunk/yasm/; revision=307

modules/parsers/nasm/bison.y.in
modules/parsers/nasm/nasm-bison.y
modules/parsers/nasm/token.l.in
src/parsers/nasm/bison.y.in
src/parsers/nasm/nasm-bison.y
src/parsers/nasm/token.l.in

index 9846e2cfedfc94a1aa69feced9e8a87622423408..4b3754e44d694e81aa1c796d4c39e1b105243045 100644 (file)
@@ -217,12 +217,17 @@ label_id: ID          {
 /* directives */
 directive: '[' DIRECTIVE_NAME DIRECTIVE_VAL ']'        {
        nasm_parser_directive($2, $3);
+       xfree($2);
+       xfree($3);
     }
     | '[' DIRECTIVE_NAME DIRECTIVE_VAL error   {
        Error(_("missing `%c'"), ']');
+       xfree($2);
+       xfree($3);
     }
     | '[' DIRECTIVE_NAME error                 {
        Error(_("missing argument to `%s'"), $2);
+       xfree($2);
     }
 ;
 
index 9846e2cfedfc94a1aa69feced9e8a87622423408..4b3754e44d694e81aa1c796d4c39e1b105243045 100644 (file)
@@ -217,12 +217,17 @@ label_id: ID          {
 /* directives */
 directive: '[' DIRECTIVE_NAME DIRECTIVE_VAL ']'        {
        nasm_parser_directive($2, $3);
+       xfree($2);
+       xfree($3);
     }
     | '[' DIRECTIVE_NAME DIRECTIVE_VAL error   {
        Error(_("missing `%c'"), ']');
+       xfree($2);
+       xfree($3);
     }
     | '[' DIRECTIVE_NAME error                 {
        Error(_("missing argument to `%s'"), $2);
+       xfree($2);
     }
 ;
 
index b868b67851e6566f073f420940cf0bfe1b5da14a..6973afbe3e2cd0bf1e81c9d4350fc5a0954c1915 100644 (file)
@@ -177,12 +177,12 @@ WS       [ \t\r]
 
 <DIRECTIVE>[a-z]+   {
     BEGIN DIRECTIVE2;
-    yylval.str_val = yytext;
+    yylval.str_val = xstrdup(yytext);
     return DIRECTIVE_NAME;
 }
     /* everything printable except for ' ', '[' and ']'. */
 <DIRECTIVE2>[!-@a-z\\^-`{|}~]+ {
-    yylval.str_val = yytext;
+    yylval.str_val = xstrdup(yytext);
     return DIRECTIVE_VAL;
 }
 <DIRECTIVE>. {
index 9846e2cfedfc94a1aa69feced9e8a87622423408..4b3754e44d694e81aa1c796d4c39e1b105243045 100644 (file)
@@ -217,12 +217,17 @@ label_id: ID          {
 /* directives */
 directive: '[' DIRECTIVE_NAME DIRECTIVE_VAL ']'        {
        nasm_parser_directive($2, $3);
+       xfree($2);
+       xfree($3);
     }
     | '[' DIRECTIVE_NAME DIRECTIVE_VAL error   {
        Error(_("missing `%c'"), ']');
+       xfree($2);
+       xfree($3);
     }
     | '[' DIRECTIVE_NAME error                 {
        Error(_("missing argument to `%s'"), $2);
+       xfree($2);
     }
 ;
 
index 9846e2cfedfc94a1aa69feced9e8a87622423408..4b3754e44d694e81aa1c796d4c39e1b105243045 100644 (file)
@@ -217,12 +217,17 @@ label_id: ID          {
 /* directives */
 directive: '[' DIRECTIVE_NAME DIRECTIVE_VAL ']'        {
        nasm_parser_directive($2, $3);
+       xfree($2);
+       xfree($3);
     }
     | '[' DIRECTIVE_NAME DIRECTIVE_VAL error   {
        Error(_("missing `%c'"), ']');
+       xfree($2);
+       xfree($3);
     }
     | '[' DIRECTIVE_NAME error                 {
        Error(_("missing argument to `%s'"), $2);
+       xfree($2);
     }
 ;
 
index b868b67851e6566f073f420940cf0bfe1b5da14a..6973afbe3e2cd0bf1e81c9d4350fc5a0954c1915 100644 (file)
@@ -177,12 +177,12 @@ WS       [ \t\r]
 
 <DIRECTIVE>[a-z]+   {
     BEGIN DIRECTIVE2;
-    yylval.str_val = yytext;
+    yylval.str_val = xstrdup(yytext);
     return DIRECTIVE_NAME;
 }
     /* everything printable except for ' ', '[' and ']'. */
 <DIRECTIVE2>[!-@a-z\\^-`{|}~]+ {
-    yylval.str_val = yytext;
+    yylval.str_val = xstrdup(yytext);
     return DIRECTIVE_VAL;
 }
 <DIRECTIVE>. {