don't check $@ after pagespec_translate
authorJoey Hess <joey@gnu.kitenet.net>
Mon, 29 Mar 2010 00:23:22 +0000 (20:23 -0400)
committerJoey Hess <joey@gnu.kitenet.net>
Mon, 29 Mar 2010 00:23:22 +0000 (20:23 -0400)
pagespec_translate may set $@ if it fails to parse a pagespec, but
due to memoization, this is not reliable. If a memoized call is repeated,
and $@ is already set for some other reason previously, it will remain
set through the call to pagespec_translate.

Instead, just check if pagespec_translate returns undef.

IkiWiki.pm
IkiWiki/Render.pm

index 927d6294000f85501f641b8a2b61f8ac2fe61f4b..6739ba56cbf59f431c5de94aa00ffbfbbc0697b8 100644 (file)
@@ -1796,7 +1796,7 @@ sub add_depends ($$;$) {
 
        # Add explicit dependencies for influences.
        my $sub=pagespec_translate($pagespec);
-       return if $@;
+       return unless defined $sub;
        foreach my $p (keys %pagesources) {
                my $r=$sub->($p, location => $page);
                my $i=$r->influences;
@@ -2001,7 +2001,7 @@ sub pagespec_match ($$;@) {
 
        my $sub=pagespec_translate($spec);
        return IkiWiki::ErrorReason->new("syntax error in pagespec \"$spec\"")
-               if $@ || ! defined $sub;
+               if ! defined $sub;
        return $sub->($page, @params);
 }
 
@@ -2019,7 +2019,7 @@ sub pagespec_match_list ($$;@) {
 
        my $sub=pagespec_translate($pagespec);
        error "syntax error in pagespec \"$pagespec\""
-               if $@ || ! defined $sub;
+               if ! defined $sub;
 
        my @candidates;
        if (exists $params{list}) {
@@ -2092,8 +2092,7 @@ sub pagespec_match_list ($$;@) {
 sub pagespec_valid ($) {
        my $spec=shift;
 
-       my $sub=pagespec_translate($spec);
-       return ! $@;
+       return defined pagespec_translate($spec);
 }
 
 sub glob2re ($) {
index af24df1550ee7682d649a79e046d0e604c39e0cf..abafb0887f32b0a6fcc25115b6ecb6be63bc4d6a 100644 (file)
@@ -565,7 +565,7 @@ sub render_dependent ($$$$$$$) {
                if (exists $depends{$p} && ! defined $reason) {
                        foreach my $dep (keys %{$depends{$p}}) {
                                my $sub=pagespec_translate($dep);
-                               next if $@ || ! defined $sub;
+                               next unless defined $sub;
 
                                # only consider internal files
                                # if the page explicitly depends