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: 21157
Status: resolved
Worked: 1 min
Priority: 0/
Queue: CGI

People
Owner: LDS [...] cpan.org
Requestors: emazep [...] gmail.com
Cc:
AdminCc:

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



Subject: Upload function still broken in CGI 3.22 w/ patch and test
For some reason the patch I've provided has not been applied (see tickets 21125 and 21126), and unfortunately a syntax error is still present in the upload sub code (though really very slight: just an extra paren). So I provide a new patch, this time conforming to the syntax grep BLOCK LIST which the autor seems to prefer. *More important* I've also provided a failing test, as upload() isn't covered in CGI.pm's test suite (both the files "upload.t" and "upload_post_text.txt" must go under /t). The provided test has been tested successfully under Linux, Windows and Mac OS X. Hope this helps. Cheers, Emanuele Zeppieri.
Subject: CGI.pm.3.22.patch
--- CGI.pm 2006-08-23 17:22:30.000000000 +0200 +++ CGI.pm.new 2006-08-24 05:14:09.000000000 +0200 @@ -3419,7 +3419,7 @@ 'upload' =><<'END_OF_FUNC', sub upload { my($self,$param_name) = self_or_default(@_); - my @param = grep {ref($_) && defined(fileno($_))} $self->param($param_name)); + my @param = grep {ref($_) && defined(fileno($_))} $self->param($param_name); return unless @param; return wantarray ? @param : $param[0]; }
Subject: upload_post_text.txt
��������������������������������������������������������������������������������������������������������������������������������������������တ��������Ⰰ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������񀠂��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������တ��������Ⰰ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
Subject: upload.t
#!/usr/local/bin/perl -w ################################################################# # Emanuele Zeppieri # # Shamelessly stolen from Data::FormValidator and CGI::Upload # ################################################################# # Due to a bug in older versions of MakeMaker & Test::Harness, we must # ensure the blib's are in @INC, else we might use the core CGI.pm use lib qw(. ./blib/lib ./blib/arch); use strict; use Test::More tests => 8; use CGI; #----------------------------------------------------------------------------- # %ENV setup. #----------------------------------------------------------------------------- %ENV = ( %ENV, 'SCRIPT_NAME' => '/test.cgi', 'SERVER_NAME' => 'perl.org', 'HTTP_CONNECTION' => 'TE, close', 'REQUEST_METHOD' => 'POST', 'SCRIPT_URI' => 'http://www.perl.org/test.cgi', 'CONTENT_LENGTH' => 3129, 'SCRIPT_FILENAME' => '/home/usr/test.cgi', 'SERVER_SOFTWARE' => 'Apache/1.3.27 (Unix) ', 'HTTP_TE' => 'deflate,gzip;q=0.3', 'QUERY_STRING' => '', 'REMOTE_PORT' => '1855', 'HTTP_USER_AGENT' => 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)', 'SERVER_PORT' => '80', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_TYPE' => 'multipart/form-data; boundary=xYzZY', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'PATH' => '/usr/local/bin:/usr/bin:/bin', 'REQUEST_URI' => '/test.cgi', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SCRIPT_URL' => '/test.cgi', 'SERVER_ADDR' => '127.0.0.1', 'DOCUMENT_ROOT' => '/home/develop', 'HTTP_HOST' => 'www.perl.org' ); #----------------------------------------------------------------------------- # Simulate the upload (really, multiple uploads contained in a single stream). #----------------------------------------------------------------------------- my $q; { local *STDIN; open STDIN, '<t/upload_post_text.txt' or die 'missing test file t/upload_post_text.txt'; binmode STDIN; $q = CGI->new; } #----------------------------------------------------------------------------- # Check that the file names retrieved by CGI are correct. #----------------------------------------------------------------------------- is( $q->param('hello_world') , 'hello_world.txt' , 'filename_1' ); is( $q->param('does_not_exist_gif'), 'does_not_exist.gif', 'filename_2' ); is( $q->param('100x100_gif') , '100x100.gif' , 'filename_3' ); is( $q->param('300x300_gif') , '300x300.gif' , 'filename_4' ); #----------------------------------------------------------------------------- # Now check that the upload method works. #----------------------------------------------------------------------------- ok( defined $q->upload('hello_world') , 'upload_basic_1' ); ok( defined $q->upload('does_not_exist_gif'), 'upload_basic_2' ); ok( defined $q->upload('100x100_gif') , 'upload_basic_3' ); ok( defined $q->upload('300x300_gif') , 'upload_basic_4' );
Sorry, the test file in the previous "upload_post_text.txt" is corrupted, sorry. I re-attach the file zipped to preserve it. Please, use this. Cheers, Emanuele Zeppieri.

Message body not shown because it is not plain text.

Sorry about this. My internal regression tests indeed do not test the upload() function -- I thought they did. I have added the contributed upload.t regression test. Thanks. Fixed in version 3.23 for real.