stas 2003/03/02 02:30:56
Modified: src/modules/perl modperl_filter.c
. Changes
Added: t/filter in_str_declined.t
t/filter/TestFilter in_str_declined.pm
Log:
fix the input filters handling of DECLINED handlers (consume the data,
on behalf of the handler) + tests
Revision Changes Path
1.1 modperl-2.0/t/filter/in_str_declined.t
Index: in_str_declined.t
===================================================================
use strict;
use warnings FATAL => 'all';
use Apache::TestRequest;
my $location = '/TestFilter::in_str_declined';
my $chunk = "1234567890";
my $data = $chunk x 2000;
my $res = POST $location, content => $data;
if ($res->is_success) {
print $res->content;
}
else {
die "server side has failed (response code: ", $res->code, "),\n",
"see t/logs/error_log for more details\n";
}
1.1 modperl-2.0/t/filter/TestFilter/in_str_declined.pm
Index: in_str_declined.pm
===================================================================
package TestFilter::in_str_declined;
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestUtil;
use Apache::Filter ();
use Apache::Const -compile => qw(OK DECLINED M_POST);
# make sure that if the input filter returns DECLINED without
# reading/printing data the data flow is not broken
sub handler {
my $filter = shift;
my $ctx = $filter->ctx;
$ctx->{invoked}++;
$filter->ctx($ctx);
# can't use $f->seen_eos, since we don't read the data, so
# we have to set the note on each invocation
$filter->r->notes->set(invoked => $ctx->{invoked});
#warn "filter was invoked $ctx->{invoked} times\n";
return Apache::DECLINED;
}
sub response {
my $r = shift;
plan $r, tests => 1;
$r->content_type('text/plain');
if ($r->method_number == Apache::M_POST) {
# consume the data so the input filter is invoked
my $data = ModPerl::Test::read_post($r);
}
# ~20k of input: makes it four bucket briages
# 2 full bucket brigades of 8k
# 1 half full brigade <8k
# eos bucket brigade
my $expected = 4;
my $invoked = $r->notes->get('invoked') || 0;
ok t_cmp($expected, $invoked, "input stream filter declined");
Apache::OK;
}
1;
__DATA__
SetHandler modperl
PerlResponseHandler TestFilter::in_str_declined::response
1.53 +2 -1 modperl-2.0/src/modules/perl/modperl_filter.c
Index: modperl_filter.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_filter.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- modperl_filter.c 8 Feb 2003 04:36:35 -0000 1.52
+++ modperl_filter.c 2 Mar 2003 10:30:56 -0000 1.53
@@ -598,8 +598,9 @@
switch (status) {
case OK:
- case DECLINED:
return APR_SUCCESS;
+ case DECLINED:
+ return ap_get_brigade(f->next, bb, input_mode, block, readbytes);
default:
return status; /*XXX*/
}
1.136 +3 -0 modperl-2.0/Changes
Index: Changes
===================================================================
RCS file: /home/cvs/modperl-2.0/Changes,v
retrieving revision 1.135
retrieving revision 1.136
diff -u -r1.135 -r1.136
--- Changes 1 Mar 2003 00:53:20 -0000 1.135
+++ Changes 2 Mar 2003 10:30:56 -0000 1.136
@@ -10,6 +10,9 @@
=item 1.99_09-dev
+fix the input filters handling of DECLINED handlers (consume the data,
+on behalf of the handler) + tests [Stas]
+
fix the code that autogenerates modperl_largefiles.h not to define
macros matching m/^-/ (was a problem on aix-4.3.3) [Stas]