read(STDIN, ....);
because STDIN is not "connected" to the client's socket. Therefore CGI.pm must always use $self->r->read() under mod_perl which will work with 'SetHandler modperl' and 'SetHandler perl-script', because the latter makes Apache->request available.
Please test your applications with this patch, especially mod_perl 1.0 apps that process POST requests, as our mp1 test suite is very incomplete.
Scott, please revert the patch I've sent earlier and try this one instead.
Lincoln, please see XXX at the end of the patch. Is it safe to assume that read_from_client always reads from STDIN? I haven't traced all possible calls of this method.
--- CGI.pm.orig 2003-11-03 15:57:01.000000000 -0800 +++ CGI.pm 2003-11-03 16:49:17.000000000 -0800 @@ -19,7 +19,7 @@ # http://stein.cshl.org/WWW/software/CGI/
$CGI::revision = '$Id: CGI.pm,v 1.130 2003/08/01 14:39:17 lstein Exp $ + patches by merlyn';
-$CGI::VERSION='3.00';
+$CGI::VERSION='3.01';
# HARD-CODED LOCATION FOR FILE UPLOAD TEMPORARY FILES.
# UNCOMMENT THIS ONLY IF YOU KNOW WHAT YOU'RE DOING.
@@ -447,7 +447,11 @@
# quietly read and discard the post
my $buffer;
my $max = $content_length;
- while ($max > 0 && (my $bytes = read(STDIN,$buffer,$max < 10000 ? $max : 10000))) {
+ while ($max > 0 &&
+ (my $bytes = $MOD_PERL
+ ? $self->r->read($buffer,$max < 10000 ? $max : 10000)
+ : read(STDIN,$buffer,$max < 10000 ? $max : 10000)
+ )) {
$max -= $bytes;
}
$self->cgi_error("413 Request entity too large");
@@ -834,7 +838,11 @@
my($self, $fh, $buff, $len, $offset) = @_;
local $^W=0; # prevent a warning
return undef unless defined($fh);
- return read($fh, $$buff, $len, $offset);
+ # XXX: what if $fh is not STDIN? but doesn't read_from_client,
+ # imply STDIN?
+ return $MOD_PERL
+ ? $self->r->read($$buff, $len, $offset)
+ : read($fh, $$buff, $len, $offset);
}
END_OF_FUNC
-- Reporting bugs: http://perl.apache.org/bugs/ Mail list info: http://perl.apache.org/maillist/modperl.html