>                 return (macrodef = FALSE);

but we shouldn't change macrodef here.

? mg
? mg_segfault.diff
? v2_mg_segfault.diff
Index: macro.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/macro.c,v
retrieving revision 1.16
diff -u -p -u -p -r1.16 macro.c
--- macro.c     19 Mar 2015 21:22:15 -0000      1.16
+++ macro.c     4 Apr 2015 16:09:38 -0000
@@ -34,11 +34,11 @@ definemacro(int f, int n)
 
        if (macrodef) {
                ewprintf("already defining macro");
-               return (macrodef = FALSE);
+               return (FALSE);
        }
 
        /* free lines allocated for string arguments */
-       if (maclhead != NULL) {
+       if (macrodef && maclhead != NULL) {
                for (lp1 = maclhead->l_fp; lp1 != maclhead; lp1 = lp2) {
                        lp2 = lp1->l_fp;
                        free(lp1);

Reply via email to