check_canattach($session, $final_filename, $tempfile);
};
if ($@) {
- json_response($q, $form, $dest."/".$filename, $@);
- error $@;
+ # save error in case called functions clobber $@
+ my $error = $@;
+ json_response($q, $form, $dest."/".$filename, $error);
+ error $error;
}
# Move the attachment into holding directory.
foreach my $filename (glob("$dir/*")) {
$filename=Encode::decode_utf8($filename);
next unless -f $filename;
- my $destdir=$config{srcdir}."/".
- linkpage(IkiWiki::possibly_foolish_untaint(
- attachment_location($form->field('page'))));
+ my $destdir=linkpage(IkiWiki::possibly_foolish_untaint(
+ attachment_location($form->field('page'))));
+ my $absdestdir=$config{srcdir}."/".$destdir;
my $destfile=IkiWiki::basename($filename);
- my $dest=$destdir.$destfile;
+ my $dest=$absdestdir.$destfile;
unlink($dest);
- IkiWiki::prep_writefile($destfile, $destdir);
+ IkiWiki::prep_writefile($destfile, $absdestdir);
rename($filename, $dest);
- push @attachments, $dest;
+ push @attachments, $destdir.$destfile;
}
return unless @attachments;
require IkiWiki::Render;
- IkiWiki::prune($dir);
+ IkiWiki::prune($dir, $config{wikistatedir}."/attachments");
# Check the attachments in and trigger a wiki refresh.
if ($config{rcs}) {