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
Download (untitled) / with headers
text/plain 629b
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
Download CGI.pm.3.22.patch
text/x-diff 452b
--- 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
Download upload.t
text/x-perl 3k
#!/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' );
Download (untitled) / with headers
text/plain 172b
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.
Download upload_post_text.txt.zip
application/zip 2.7k

Message body not shown because it is not plain text.

Download (untitled) / with headers
text/plain 211b
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.


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.