X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/136979fac670b6476069a63385d3e5e53643b68e..43a1640345e5af8f173a9d3669a4c9e0dfb0a512:/IkiWiki/Render.pm diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 79935f323..ab3a71671 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -61,6 +61,10 @@ sub backlinks ($) { sub genpage ($$) { my $page=shift; my $content=shift; + + run_hooks(postscan => sub { + shift->(page => $page, content => $content); + }); my $templatefile; run_hooks(templatefile => sub { @@ -130,10 +134,6 @@ sub genpage ($$) { $content=$template->output; - run_hooks(postscan => sub { - shift->(page => $page, content => $content); - }); - run_hooks(format => sub { $content=shift->( page => $page, @@ -285,24 +285,26 @@ sub find_src_files () { find({ no_chdir => 1, wanted => sub { - $_=decode_utf8($_); - if (file_pruned($_, $config{srcdir})) { + my $file=decode_utf8($_); + $file=~s/^\Q$config{srcdir}\E\/?//; + return if -l $_ || -d _ || ! length $file; + my $page = pagename($file); + if (! exists $pagesources{$page} && + file_pruned($file)) { $File::Find::prune=1; + return; } - elsif (! -l $_ && ! -d _) { - my ($f)=/$config{wiki_file_regexp}/; # untaint - if (! defined $f) { - warn(sprintf(gettext("skipping bad filename %s"), $_)."\n"); - } - else { - $f=~s/^\Q$config{srcdir}\E\/?//; - push @files, $f; - my $page = pagename($f); - if ($pages{$page}) { - debug(sprintf(gettext("%s has multiple possible source pages"), $page)); - } - $pages{$page}=1; + + my ($f) = $file =~ /$config{wiki_file_regexp}/; # untaint + if (! defined $f) { + warn(sprintf(gettext("skipping bad filename %s"), $file)."\n"); + } + else { + push @files, $f; + if ($pages{$page}) { + debug(sprintf(gettext("%s has multiple possible source pages"), $page)); } + $pages{$page}=1; } }, }, $config{srcdir}); @@ -310,27 +312,28 @@ sub find_src_files () { find({ no_chdir => 1, wanted => sub { - $_=decode_utf8($_); - if (file_pruned($_, $dir)) { + my $file=decode_utf8($_); + $file=~s/^\Q$dir\E\/?//; + return if -l $_ || -d _ || ! length $file; + my $page=pagename($file); + if (! exists $pagesources{$page} && + file_pruned($file)) { $File::Find::prune=1; + return; } - elsif (! -l $_ && ! -d _) { - my ($f)=/$config{wiki_file_regexp}/; # untaint - if (! defined $f) { - warn(sprintf(gettext("skipping bad filename %s"), $_)."\n"); - } - else { - $f=~s/^\Q$dir\E\/?//; - # avoid underlaydir - # override attacks; see - # security.mdwn - if (! -l "$config{srcdir}/$f" && - ! -e _) { - my $page=pagename($f); - if (! $pages{$page}) { - push @files, $f; - $pages{$page}=1; - } + + my ($f) = $file =~ /$config{wiki_file_regexp}/; # untaint + if (! defined $f) { + warn(sprintf(gettext("skipping bad filename %s"), $file)."\n"); + } + else { + # avoid underlaydir override + # attacks; see security.mdwn + if (! -l "$config{srcdir}/$f" && + ! -e _) { + if (! $pages{$page}) { + push @files, $f; + $pages{$page}=1; } } }