aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin
diff options
context:
space:
mode:
authorSimon McVittie <smcv@debian.org>2015-06-07 14:49:31 +0100
committerSimon McVittie <smcv@debian.org>2015-06-07 14:51:13 +0100
commit7a52c87a8c745577a50d6c9d134f62f9c5b26b0a (patch)
tree2974435ffd464610d1f5527c5fb724d93d7f2c16 /IkiWiki/Plugin
parent761d9f16054133e46c968fb46bc28fd6aed82c2a (diff)
downloadikiwiki-7a52c87a8c745577a50d6c9d134f62f9c5b26b0a.tar
ikiwiki-7a52c87a8c745577a50d6c9d134f62f9c5b26b0a.tar.gz
Make the attachment plugin work with CGI.pm 4.x (Closes: #786586; workaround for #786587 in libcgi-pm-perl)
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r--IkiWiki/Plugin/attachment.pm25
1 files changed, 17 insertions, 8 deletions
diff --git a/IkiWiki/Plugin/attachment.pm b/IkiWiki/Plugin/attachment.pm
index 9bac96fc6..e8135a8fd 100644
--- a/IkiWiki/Plugin/attachment.pm
+++ b/IkiWiki/Plugin/attachment.pm
@@ -133,8 +133,10 @@ sub formbuilder (@) {
return if ! defined $form->field("do") || ($form->field("do") ne "edit" && $form->field("do") ne "create") ;
my $filename=Encode::decode_utf8(scalar $q->param('attachment'));
+ my $handle=$q->upload('attachment');
+
if (defined $filename && length $filename) {
- attachment_store($filename, $form, $q, $params{session});
+ attachment_store($filename, $handle, $form, $q, $params{session});
}
if ($form->submitted eq "Save Page") {
@@ -190,13 +192,20 @@ sub is_held_attachment {
# Stores the attachment in a holding area, not yet in the wiki proper.
sub attachment_store {
my $filename=shift;
+ my $handle=shift;
my $form=shift;
my $q=shift;
my $session=shift;
-
- # This is an (apparently undocumented) way to get the name
- # of the temp file that CGI writes the upload to.
- my $tempfile=$q->tmpFileName($filename);
+
+ my $tempfile;
+ if (defined $handle) {
+ # This is what works in CGI.pm 4.09+: $q->tmpFileName($q->upload('attachment'))
+ $tempfile=$q->tmpFileName($handle);
+ }
+ if (! defined $tempfile || ! length $tempfile) {
+ # This is what is *documented* in CGI.pm 4.09: $q->tmpFileName($q->param('attachment'))
+ $tempfile=$q->tmpFileName($filename);
+ }
if (! defined $tempfile || ! length $tempfile) {
# perl 5.8 needs an alternative, awful method
if ($q =~ /HASH/ && exists $q->{'.tmpfiles'}) {
@@ -205,9 +214,9 @@ sub attachment_store {
last if defined $tempfile && length $tempfile;
}
}
- if (! defined $tempfile || ! length $tempfile) {
- error("CGI::tmpFileName failed to return the uploaded file name");
- }
+ }
+ if (! defined $tempfile || ! length $tempfile) {
+ error("CGI::tmpFileName failed to return the uploaded file name");
}
$filename=IkiWiki::basename($filename);