Fix crash that could occur when a needsbuild hook returned a file that does not exist.
authorJoey Hess <joey@kitenet.net>
Wed, 10 Jul 2013 21:02:24 +0000 (17:02 -0400)
committerJoey Hess <joey@kitenet.net>
Wed, 10 Jul 2013 21:02:24 +0000 (17:02 -0400)
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.

IkiWiki/Render.pm
debian/changelog

index a90d202eef0c10fd480b00459c1238f58052b094..c41dac9f6aa775e89081545e7f294b361a53a501 100644 (file)
@@ -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);
 
index 04feaffcb5258e0f5e41d1f681092cfddd1b948a..c3f4db7983d6ba6dea647f48c559f299fa10bba4 100644 (file)
@@ -15,6 +15,8 @@ ikiwiki (3.20130519) UNRELEASED; urgency=low
     accessed via https.
   * The ip() pagespec can now contain glob characters to match eg, a subnet
     full of spammers.
+  * Fix crash that could occur when a needsbuild hook returned a file
+    that does not exist.
 
  -- Joey Hess <joeyh@debian.org>  Sun, 23 Jun 2013 14:02:01 -0400