Skip Menu |

Preferred bug tracker

Please visit the preferred bug tracker to report your issue.

This queue is for tickets about the CGI CPAN distribution.

Report information
The Basics
Id: 62762
Status: resolved
Priority: 0/
Queue: CGI

People
Owner: MARKSTOS [...] cpan.org
Requestors: ntyni [...] iki.fi
Cc:
AdminCc:

Bug Information
Severity: Normal
Broken in: (no value)
Fixed in: (no value)



Subject: [PATCH] TMPDIRECTORY fixes and tests
The code for choosing the temporary directory for uploaded files has several glitches: - support for user temporary directories ($HOME/tmp) was commented out in 2.61 but the documentation wasn't updated - setting $CGITempFile::TMPDIRECTORY before loading CGI.pm has been working but undocumented since 3.12 (which listed it in Changes as $CGI::TMPDIRECTORY) - unfortunately the previous change broke the runtime check for looking for a new temporary directory if the current one suddenly became unwritable (as commonly happens with mod_perl and the like) - when creating a temporary file in the directory fails, the error message could indicate the root of the problem better Proposed patch against 3.49 attached, including a few new test cases. Originally reported by Peter Gervai in <http://bugs.debian.org/367711>. Thanks for your work on CGI.pm, -- Niko Tyni (Debian Perl Group) ntyni@debian.org
Subject: 0001-TMPDIRECTORY-fixes-and-tests.patch
From a13487721a3a6eec8ad43d9ee5da4854db2a184b Mon Sep 17 00:00:00 2001 From: Niko Tyni <ntyni@debian.org> Date: Fri, 5 Nov 2010 21:40:13 +0200 Subject: [PATCH] TMPDIRECTORY fixes and tests The code for choosing the temporary directory for uploaded files has several glitches: - support for user temporary directories ($HOME/tmp) was commented out in 2.61 but the documentation wasn't updated - setting $CGITempFile::TMPDIRECTORY before loading CGI.pm has been working but undocumented since 3.12 (which listed it in Changes as $CGI::TMPDIRECTORY) - unfortunately the previous change broke the runtime check for looking for a new temporary directory if the current one suddenly became unwritable (as commonly happens with mod_perl and the like) - when creating a temporary file in the directory fails, the error message could indicate the root of the problem better Originally reported by Peter Gervai in <http://bugs.debian.org/367711>. --- lib/CGI.pm | 10 ++++++---- t/tmpfile.t | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 t/tmpfile.t diff --git a/lib/CGI.pm b/lib/CGI.pm index 355b8d1..a05b9f6 100644 --- a/lib/CGI.pm +++ b/lib/CGI.pm @@ -3622,7 +3622,7 @@ sub read_multipart { last if defined($filehandle = Fh->new($filename,$tmp,$PRIVATE_TEMPFILES)); $seqno += int rand(100); } - die "CGI open of tmpfile: $!\n" unless defined $filehandle; + die "CGI.pm open of tmpfile $tmp/$filename failed: $!\n" unless defined $filehandle; $CGI::DefaultClass->binmode($filehandle) if $CGI::needs_binmode && defined fileno($filehandle); @@ -4257,7 +4257,10 @@ $AUTOLOADED_ROUTINES=<<'END_OF_AUTOLOAD'; sub new { my($package,$sequence) = @_; my $filename; - find_tempdir() unless -w $TMPDIRECTORY; + unless (-w $TMPDIRECTORY) { + $TMPDIRECTORY = undef; + find_tempdir(); + } for (my $i = 0; $i < $MAXTRIES; $i++) { last if ! -f ($filename = sprintf("\%s${SL}CGItemp%d", $TMPDIRECTORY, $sequence++)); } @@ -5114,8 +5117,7 @@ file is created with mode 0600 (neither world nor group readable). The temporary directory is selected using the following algorithm: - 1. if the current user (e.g. "nobody") has a directory named - "tmp" in its home directory, use that (Unix systems only). + 1. if $CGITempFile::TMPDIRECTORY is already set, use that 2. if the environment variable TMPDIR exists, use the location indicated. diff --git a/t/tmpfile.t b/t/tmpfile.t new file mode 100644 index 0000000..c9d2041 --- /dev/null +++ b/t/tmpfile.t @@ -0,0 +1,35 @@ +#!perl +use Test::More tests => 5; +use strict; + +my ($testdir, $testdir2); + +BEGIN { + $testdir = "CGItest"; + $testdir2 = "CGItest2"; + for ($testdir, $testdir2) { + ( -d ) || mkdir; + ( ! -w ) || chmod 0700, $_; + } + $CGITempFile::TMPDIRECTORY = $testdir; + $ENV{TMPDIR} = $testdir2; +} + +use CGI; +is($CGITempFile::TMPDIRECTORY, $testdir, "can pre-set \$CGITempFile::TMPDIRECTORY"); +CGITempFile->new; +is($CGITempFile::TMPDIRECTORY, $testdir, "\$CGITempFile::TMPDIRECTORY unchanged"); + +chmod 0500, $testdir; +CGITempFile->new; +is($CGITempFile::TMPDIRECTORY, $testdir2, + "unwritable \$CGITempFile::TMPDIRECTORY overridden"); + +chmod 0500, $testdir2; +CGITempFile->new; +isnt($CGITempFile::TMPDIRECTORY, $testdir2, + "unwritable \$ENV{TMPDIR} overridden"); +isnt($CGITempFile::TMPDIRECTORY, $testdir, + "unwritable \$ENV{TMPDIR} not overridden with an unwritable \$CGITempFile::TMPDIRECTORY"); + +END { rmdir for ($testdir, $testdir2) } -- 1.7.2.3
Subject: Re: [rt.cpan.org #62762] [PATCH] TMPDIRECTORY fixes and tests
Date: Mon, 08 Nov 2010 11:21:43 -0500
To: bug-CGI.pm [...] rt.cpan.org
From: Mark Stosberg <mark [...] summersault.com>
Thanks for reporting this issue, and for providing a proposed patch with automated tests. We'll review contribution and get back to you. The maintenance help is appreciated! Mark
Thanks, Your patches have been applied in our git repo now. Mark
Subject: patch released for CGI.pm
Thanks for the bug report. A patch for it appeared in 3.51, if not sooner. Resolving. Mark