X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/b8681e19d170faab819d131e8e1bd173daeedc0b..0a56f05b53c8b9a91478c2af932a60c4a46c441b:/IkiWiki/Plugin/meta.pm diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm index ac8890795..4aa545a93 100644 --- a/IkiWiki/Plugin/meta.pm +++ b/IkiWiki/Plugin/meta.pm @@ -24,6 +24,7 @@ sub filter (@) { #{{{ my %params=@_; $meta{$params{page}}=''; + delete $pagestate{$params{page}}{meta}{redir}; return $params{content}; } # }}} @@ -70,14 +71,29 @@ sub preprocess (@) { #{{{ } } elsif ($key eq 'redir') { + return "" if $destpage ne $page; my $safe=0; if ($value !~ /^\w+:\/\//) { + add_depends($page, $value); my $link=bestlink($page, $value); if (! length $link) { return "[[meta ".gettext("redir page not found")."]]"; } - $value=urlto($link, $destpage); + + $value=urlto($link, $page); $safe=1; + + # redir cycle detection + $pagestate{$page}{meta}{redir}=$link; + my $at=$page; + my %seen; + while (exists $pagestate{$at}{meta}{redir}) { + if ($seen{$at}) { + return "[[meta ".gettext("redir cycle is not allowed")."]]"; + } + $seen{$at}=1; + $at=$pagestate{$at}{meta}{redir}; + } } else { $value=encode_entities($value);