On Thu, Nov 26, 2015 at 01:03:22PM -0500, Michael McConville wrote:
> This nondeterministically underflows _sf_top_ix, causing a segfault:
> 
>       http://www.sccs.swarthmore.edu/users/16/mmcconv1/dump/crash.l
> 

Looks like _sf_top_ix always underflows whenever there are extra closing
parentheses in the rules section. The nondeterministic behavior is
probably heap layout related.

I've taken your suggestion and updated scan.l to give a syntax error
when there is an unbalanced parenthesis, which fixes the issue:

Index: scan.l
===================================================================
RCS file: /cvs/src/usr.bin/lex/scan.l,v
retrieving revision 1.12
diff -u -p -r1.12 scan.l
--- scan.l      19 Nov 2015 23:34:56 -0000      1.12
+++ scan.l      30 Nov 2015 21:19:44 -0000
@@ -741,7 +741,13 @@ nmstr[yyleng - 2 - end_is_ws] = '\0';  /
                     return '(';
                 }
     "("         sf_push(); return '(';
-    ")"         sf_pop(); return ')';
+    ")"         {
+                    if (_sf_top_ix > 0) {
+                        sf_pop();
+                        return ')';
+                    } else
+                        synerr(_("unbalanced parenthesis"));
+                }
 
        [/|*+?.(){}]    return (unsigned char) yytext[0];
        .               RETURNCHAR;

Reply via email to