From: Junio C Hamano Date: Wed, 26 Nov 2008 22:54:34 GMT Subject: Re: [PATCH 1/2] Add / command in add --patch (feature request) Message-ID: <7vod02cd3p.fsf@gitster.siamese.dyndns.org> In-Reply-To: <20081126223858.GB10786@coredump.intra.peff.net> Jeff King writes: > On Wed, Nov 26, 2008 at 08:51:20PM +0000, William Pursell wrote: > >> This is naive, and it is easy for an invalid >> search string to cause a perl error. >> [...] >> + if( $text !~ $search_s ) { > > Yeah, a bad regex will cause the whole program to barf. Maybe wrap it in > an eval, like this? > > my $r = eval { $text !~ $search_s }; > if ($@) { > print STDERR "error in search string: $@\n"; > next; > } > if ($r) { > ... > > Or similar (I didn't look at the code closely enough to know if "next" > is the right thing there). Use of eval is a good way to protect against this kind of breakage, but it should be done close to where the string is given by the user, perhaps in here: + elsif ($line =~ m|^/(.*)|) { + $search_s = $1; + } Something like... elsif ($line =~ m|^/(.*)|) { $search_string = $1; eval { $search_string =~ /$search_string/; }; if ($@) { print STDERR "Regexp error in $search_string: $@"; next; } ...