stas 2003/10/06 18:04:13
Modified: src/modules/perl modperl_filter.c
t/filter in_bbs_inject_header.t
t/filter/TestFilter in_bbs_inject_header.pm
. Changes
Log:
- make sure that connection filters won't be inserted as request filters
- adjust the test to die, if the connection filter that's designed to work
only with HTTP headers, gets to read some request body (+test cleanup)
Revision Changes Path
1.72 +7 -0 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.71
retrieving revision 1.72
diff -u -u -r1.71 -r1.72
--- modperl_filter.c 7 Oct 2003 01:01:52 -0000 1.71
+++ modperl_filter.c 7 Oct 2003 01:04:13 -0000 1.72
@@ -900,6 +900,13 @@
continue;
}
+ if ((handlers[i]->attrs & MP_FILTER_CONNECTION_HANDLER)) {
+ MP_TRACE_f(MP_FUNC,
+ "%s is not a FilterRequest handler\n",
+ handlers[i]->name);
+ continue;
+ }
+
/* XXX: I fail to see where this feature is used, since
* modperl_filter_add_connection doesn't register request
* filters. may be it'll be still useful when the same
1.2 +2 -1 modperl-2.0/t/filter/in_bbs_inject_header.t
Index: in_bbs_inject_header.t
===================================================================
RCS file: /home/cvs/modperl-2.0/t/filter/in_bbs_inject_header.t,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -u -r1.1 -r1.2
--- in_bbs_inject_header.t 3 Oct 2003 22:41:39 -0000 1.1
+++ in_bbs_inject_header.t 7 Oct 2003 01:04:13 -0000 1.2
@@ -14,6 +14,7 @@
my $config = Apache::Test::config();
my $hostport = Apache::TestRequest::hostport($config);
+my $content = "This body shouldn't be seen by the filter";
t_debug("connecting to $hostport");
-print POST_BODY_ASSERT $location, content => "whatever";
+print POST_BODY_ASSERT $location, content => $content;
1.2 +13 -14 modperl-2.0/t/filter/TestFilter/in_bbs_inject_header.pm
Index: in_bbs_inject_header.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/t/filter/TestFilter/in_bbs_inject_header.pm,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -u -r1.1 -r1.2
--- in_bbs_inject_header.pm 3 Oct 2003 22:41:39 -0000 1.1
+++ in_bbs_inject_header.pm 7 Oct 2003 01:04:13 -0000 1.2
@@ -19,7 +19,7 @@
# and in the middle, whichever way you prefer.
use strict;
-use warnings;# FATAL => 'all';
+use warnings FATAL => 'all';
use base qw(Apache::Filter);
@@ -43,6 +43,8 @@
'X-Extra-Header3' => 'Value 3',
);
+my $request_body = "This body shouldn't be seen by the filter";
+
# returns 1 if a bucket with a header was inserted to the $bb's tail,
# otherwise returns 0 (i.e. if there are no buckets to insert)
sub inject_header_bucket {
@@ -77,9 +79,6 @@
debug join '', "-" x 20 , " filter called ", "-" x 20;
- use Data::Dumper;
- warn Dumper $filter->ctx;
-
my $ctx;
unless ($ctx = $filter->ctx) {
debug "filter context init";
@@ -97,15 +96,14 @@
# handling the HTTP request body
if ($ctx->{done_with_headers}) {
# XXX: when the bug in httpd filter will be fixed all the
- # code in this branch will be replaced with $filter->remove;
+ # code in this branch will be replaced with:
+ # $filter->remove;
+ # return Apache::DECLINED;
# at the moment (2.0.48) it doesn't work
# so meanwhile tell the mod_perl filter core to pass-through
# the brigade unmodified
debug "passing the body through unmodified";
return Apache::DECLINED;
- #my $rv = $filter->next->get_brigade($bb, $mode, $block, $readbytes);
- #return $rv unless $rv == APR::SUCCESS;
- #return Apache::OK;
}
# any custom HTTP header buckets to inject?
@@ -131,10 +129,11 @@
my $status = $bucket->read($data);
debug "filter read:\n[$data]";
+ return $status unless $status == APR::SUCCESS;
- if ($status != APR::SUCCESS) {
- return $status;
- }
+ # check that we really work only on the headers
+ die "This filter should not ever receive the request body, " .
+ "but HTTP headers" if ($data||'') eq $request_body;
if ($data and $data =~ /^POST/) {
# demonstrate how to add a header while processing other headers
@@ -186,10 +185,11 @@
sub response {
my $r = shift;
+ my $data = ModPerl::Test::read_post($r);
+
plan $r, tests => 2 + keys %headers;
- my $data = ModPerl::Test::read_post($r);
- ok t_cmp(8, length($data), "whatever");
+ ok t_cmp($request_body, $data);
ok t_cmp($header1_val,
$r->headers_in->get($header1_key),
@@ -212,7 +212,6 @@
# be set by the time the filter is inserted into the filter chain
PerlModule TestFilter::in_bbs_inject_header
PerlInputFilterHandler TestFilter::in_bbs_inject_header
-
<Location /TestFilter__in_bbs_inject_header>
SetHandler modperl
PerlResponseHandler TestFilter::in_bbs_inject_header::response
1.228 +2 -0 modperl-2.0/Changes
Index: Changes
===================================================================
RCS file: /home/cvs/modperl-2.0/Changes,v
retrieving revision 1.227
retrieving revision 1.228
diff -u -u -r1.227 -r1.228
--- Changes 2 Oct 2003 17:45:52 -0000 1.227
+++ Changes 7 Oct 2003 01:04:13 -0000 1.228
@@ -12,6 +12,8 @@
=item 1.99_11-dev -
+make sure that connection filters won't be inserted as request filters [Stas]
+
Prevent the 'Use of uninitialized value.' warning when
ModPerl::Util::exit is used. [Stas]