my %params=@_;
$meta{$params{page}}='';
+ delete $pagestate{$params{page}}{meta}{redir};
return $params{content};
} # }}}
}
}
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);