From 7a52c87a8c745577a50d6c9d134f62f9c5b26b0a Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sun, 7 Jun 2015 14:49:31 +0100 Subject: [PATCH] Make the attachment plugin work with CGI.pm 4.x (Closes: #786586; workaround for #786587 in libcgi-pm-perl) --- IkiWiki/Plugin/attachment.pm | 25 +++++++++++++++++-------- debian/changelog | 2 ++ 2 files changed, 19 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); diff --git a/debian/changelog b/debian/changelog index 14ef4e71b..f142d21ca 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,6 +18,8 @@ ikiwiki (3.20150330) UNRELEASED; urgency=medium * Do not enable emailauth by default, to avoid surprises on httpauth-only sites. Enable it by default in openid instead, since it is essentially a replacement for OpenIDs. + * Make the attachment plugin work with CGI.pm 4.x (Closes: #786586; + workaround for #786587 in libcgi-pm-perl) -- Joey Hess Tue, 28 Apr 2015 12:24:08 -0400