aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2013-07-10 17:02:24 -0400
committerJoey Hess <joey@kitenet.net>2013-07-10 17:02:24 -0400
commitacb07ef4164643ac0dac28aab2ceae24510e5641 (patch)
tree9c91e2404f71b815af9c8043a972e72999755f64 /IkiWiki
parent533793ee462552dd0b782a69e2cfe48c8f93dedc (diff)
downloadikiwiki-acb07ef4164643ac0dac28aab2ceae24510e5641.tar
ikiwiki-acb07ef4164643ac0dac28aab2ceae24510e5641.tar.gz
Fix crash that could occur when a needsbuild hook returned a file that does not exist.
I saw this happen with calendar, when it wanted to update a page, that had a calendar on it, but the page had just been deleted. This caused srcfile_stat to crash.
Diffstat (limited to 'IkiWiki')
-rw-r--r--IkiWiki/Render.pm10
1 files changed, 9 insertions, 1 deletions
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index a90d202ee..c41dac9f6 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -770,9 +770,17 @@ sub refresh () {
my ($new, $internal_new)=find_new_files($files);
my ($del, $internal_del)=find_del_files($pages);
my ($changed, $internal_changed)=find_changed($files);
+ my %existingfiles;
run_hooks(needsbuild => sub {
my $ret=shift->($changed, [@$del, @$internal_del]);
- $changed=$ret if ref $ret eq 'ARRAY';
+ if (ref $ret eq 'ARRAY') {
+ if (! %existingfiles) {
+ foreach my $f (@$files) {
+ $existingfiles{$f}=1;
+ }
+ }
+ @$changed=grep $existingfiles{$_}, @$ret;
+ }
});
my $oldlink_targets=calculate_old_links($changed, $del);