]> granicus.if.org Git - yasm/commitdiff
Fix a memory re-free issue in nasm_parser_directive(). vp->param was passed
authorPeter Johnson <peter@tortall.net>
Mon, 19 Nov 2001 04:15:22 +0000 (04:15 -0000)
committerPeter Johnson <peter@tortall.net>
Mon, 19 Nov 2001 04:15:22 +0000 (04:15 -0000)
to a function that keeps the pointer, and then the pointer is freed.  Whoops!

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

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

index 4317140e2a3ce6a5deaef014d93adabffda77cf7..a4aa433e972446b9a33e1d7475543c3ddbc441fb 100644 (file)
@@ -621,9 +621,15 @@ nasm_parser_directive(const char *name, valparamhead *valparams,
            Error(_("invalid argument to [%s]"), "SECTION");
     } else if (strcasecmp(name, "absolute") == 0) {
        vp = vps_first(valparams);
-       nasm_parser_cur_section =
-           sections_switch_absolute(&nasm_parser_sections, vp->val ?
-               expr_new_ident(ExprSym(symrec_use(vp->val))) : vp->param);
+       if (vp->val)
+           nasm_parser_cur_section =
+               sections_switch_absolute(&nasm_parser_sections,
+                   expr_new_ident(ExprSym(symrec_use(vp->val))));
+       else if (vp->param) {
+           nasm_parser_cur_section =
+               sections_switch_absolute(&nasm_parser_sections, vp->param);
+           vp->param = NULL;
+       }
        nasm_parser_prev_bc = (bytecode *)NULL;
     } else if (strcasecmp(name, "bits") == 0) {
        if ((vp = vps_first(valparams)) && !vp->val && vp->param != NULL &&
index 4317140e2a3ce6a5deaef014d93adabffda77cf7..a4aa433e972446b9a33e1d7475543c3ddbc441fb 100644 (file)
@@ -621,9 +621,15 @@ nasm_parser_directive(const char *name, valparamhead *valparams,
            Error(_("invalid argument to [%s]"), "SECTION");
     } else if (strcasecmp(name, "absolute") == 0) {
        vp = vps_first(valparams);
-       nasm_parser_cur_section =
-           sections_switch_absolute(&nasm_parser_sections, vp->val ?
-               expr_new_ident(ExprSym(symrec_use(vp->val))) : vp->param);
+       if (vp->val)
+           nasm_parser_cur_section =
+               sections_switch_absolute(&nasm_parser_sections,
+                   expr_new_ident(ExprSym(symrec_use(vp->val))));
+       else if (vp->param) {
+           nasm_parser_cur_section =
+               sections_switch_absolute(&nasm_parser_sections, vp->param);
+           vp->param = NULL;
+       }
        nasm_parser_prev_bc = (bytecode *)NULL;
     } else if (strcasecmp(name, "bits") == 0) {
        if ((vp = vps_first(valparams)) && !vp->val && vp->param != NULL &&
index 4317140e2a3ce6a5deaef014d93adabffda77cf7..a4aa433e972446b9a33e1d7475543c3ddbc441fb 100644 (file)
@@ -621,9 +621,15 @@ nasm_parser_directive(const char *name, valparamhead *valparams,
            Error(_("invalid argument to [%s]"), "SECTION");
     } else if (strcasecmp(name, "absolute") == 0) {
        vp = vps_first(valparams);
-       nasm_parser_cur_section =
-           sections_switch_absolute(&nasm_parser_sections, vp->val ?
-               expr_new_ident(ExprSym(symrec_use(vp->val))) : vp->param);
+       if (vp->val)
+           nasm_parser_cur_section =
+               sections_switch_absolute(&nasm_parser_sections,
+                   expr_new_ident(ExprSym(symrec_use(vp->val))));
+       else if (vp->param) {
+           nasm_parser_cur_section =
+               sections_switch_absolute(&nasm_parser_sections, vp->param);
+           vp->param = NULL;
+       }
        nasm_parser_prev_bc = (bytecode *)NULL;
     } else if (strcasecmp(name, "bits") == 0) {
        if ((vp = vps_first(valparams)) && !vp->val && vp->param != NULL &&
index 4317140e2a3ce6a5deaef014d93adabffda77cf7..a4aa433e972446b9a33e1d7475543c3ddbc441fb 100644 (file)
@@ -621,9 +621,15 @@ nasm_parser_directive(const char *name, valparamhead *valparams,
            Error(_("invalid argument to [%s]"), "SECTION");
     } else if (strcasecmp(name, "absolute") == 0) {
        vp = vps_first(valparams);
-       nasm_parser_cur_section =
-           sections_switch_absolute(&nasm_parser_sections, vp->val ?
-               expr_new_ident(ExprSym(symrec_use(vp->val))) : vp->param);
+       if (vp->val)
+           nasm_parser_cur_section =
+               sections_switch_absolute(&nasm_parser_sections,
+                   expr_new_ident(ExprSym(symrec_use(vp->val))));
+       else if (vp->param) {
+           nasm_parser_cur_section =
+               sections_switch_absolute(&nasm_parser_sections, vp->param);
+           vp->param = NULL;
+       }
        nasm_parser_prev_bc = (bytecode *)NULL;
     } else if (strcasecmp(name, "bits") == 0) {
        if ((vp = vps_first(valparams)) && !vp->val && vp->param != NULL &&