Die on patterns that will match empty string forever
authorStephen Potter <spp@psa.pencom.com>
Fri, 28 Mar 1997 21:38:30 +0000 (15:38 -0600)
committerChip Salzenberg <chip@atlantic.net>
Tue, 25 Mar 1997 19:04:34 +0000 (07:04 +1200)
Subject: Re: Segementation fault in perl5.001 and 5.003

Strange sunspot activity caused =?iso-8859-1?Q?Markus_Thei=DFinger?= <Markus.Th
eissinger@gmd.de> to write:
| Hi,
|
| perl -e '$_=3D" 2"; print STDOUT /^(\s*(\))*)+$/;'
|
| produces a segmentation fault [snips]

Confirmed on 3_95.  I'm surprised this kind of thing lasted this long.
Actually, I could have sworn someone fixed this awhile back.  I suppose one
of the regulars could probably provide a better patch.

Works fine on 4.036, this patch returns it to 4.036 functionality.

p5p-msgid: 199703282138.PAA28311@psa.pencom.com

regcomp.c

index 4c34b59..5dad7d7 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -697,6 +697,10 @@ I32 *flagp;
        *flagp = flags;
        return(ret);
     }
+
+    if (!(flags&HASWIDTH) && op != '?')
+      FAIL("regexp *+ operand could be empty");
+
     nextchar();
 
     *flagp = (op != '+') ? (WORST|SPSTART) : (WORST|HASWIDTH);