Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock
Please unblock package libapache2-mod-perl2 This fixes a sporadic FTBFS bug. I assume you'd like to have this in wheezy to avoid it causing problems during security updates/point releases. Patch attached unblock libapache2-mod-perl2/2.0.7-2
diff -Nru libapache2-mod-perl2-2.0.7/debian/changelog libapache2-mod-perl2-2.0.7/debian/changelog --- libapache2-mod-perl2-2.0.7/debian/changelog 2012-06-07 18:51:39.000000000 +0100 +++ libapache2-mod-perl2-2.0.7/debian/changelog 2013-01-05 18:27:30.000000000 +0000 @@ -1,3 +1,10 @@ +libapache2-mod-perl2 (2.0.7-2) unstable; urgency=low + + * Apply patch from Zefram fixing occasional FTBFS due to + pipelined response deadlock (Closes: #676754) + + -- Dominic Hargreaves <d...@earth.li> Sat, 05 Jan 2013 18:27:29 +0000 + libapache2-mod-perl2 (2.0.7-1) unstable; urgency=low * New upstream release diff -Nru libapache2-mod-perl2-2.0.7/debian/patches/260_fix_pipelined_response_deadlock.patch libapache2-mod-perl2-2.0.7/debian/patches/260_fix_pipelined_response_deadlock.patch --- libapache2-mod-perl2-2.0.7/debian/patches/260_fix_pipelined_response_deadlock.patch 1970-01-01 01:00:00.000000000 +0100 +++ libapache2-mod-perl2-2.0.7/debian/patches/260_fix_pipelined_response_deadlock.patch 2013-01-04 23:47:05.000000000 +0000 @@ -0,0 +1,111 @@ +Subject: pipelined response deadlock +Date: Fri, 4 Jan 2013 16:27:07 +0000 +From: Zefram <zefram [...] fysh.org> + +There's a race condition that can cause mod_perl's test suite to hang +in t/filter/in_str_declined.t. The problem is that the response handler +starts generating response body, and so triggers header output, before +it reads the request body. If LWP::Protocol::http, which is the client +for this test, receives a complete set of response headers, it will stop +sending the request body. (However, if the request body is no more than +8192 octets then it will send the whole body before it starts looking +for a response. The failure only shows up with an appreciably large +request body.) + +RFC 2616 doesn't explicitly address this sort of pipelining, but the +start of section 6 does say "After receiving and interpreting a request +message, a server responds with an HTTP response message.", which can be +read as prohibiting sending any part of the response before the entire +request has been received. + +The attached patch fixes this issue by making all the POST handlers in +the test suite read the body before doing anything that generates output +(specifically plan()). + +-zefram + +Bug-Debian: http://bugs.debian.org/676754 +Bug: https://rt.cpan.org/Public/Bug/Display.html?id=82409 +Origin: https://rt.cpan.org/Public/Bug/Display.html?id=82409 + +--- a/t/filter/TestFilter/in_str_declined.pm 2011-02-08 02:00:11.000000000 +0000 ++++ b/t/filter/TestFilter/in_str_declined.pm 2013-01-04 16:08:14.000000000 +0000 +@@ -35,13 +35,17 @@ + sub response { + my $r = shift; + ++ my $data; ++ if ($r->method_number == Apache2::Const::M_POST) { ++ # consume the data so the input filter is invoked ++ $data = TestCommon::Utils::read_post($r); ++ } ++ + plan $r, tests => 2; + + $r->content_type('text/plain'); + + if ($r->method_number == Apache2::Const::M_POST) { +- # consume the data so the input filter is invoked +- my $data = TestCommon::Utils::read_post($r); + ok t_cmp(length $data, 20000, "the request body received ok"); + } + +--- a/t/filter/TestFilter/in_str_declined_read.pm 2011-02-08 02:00:11.000000000 +0000 ++++ b/t/filter/TestFilter/in_str_declined_read.pm 2013-01-04 16:06:28.000000000 +0000 +@@ -31,14 +31,19 @@ + sub response { + my $r = shift; + ++ my $err; ++ if ($r->method_number == Apache2::Const::M_POST) { ++ # this should fail, because of the failing filter ++ eval { TestCommon::Utils::read_post($r) }; ++ $err = $@; ++ } ++ + plan $r, tests => 1; + + $r->content_type('text/plain'); + + if ($r->method_number == Apache2::Const::M_POST) { +- # this should fail, because of the failing filter +- eval { TestCommon::Utils::read_post($r) }; +- ok $@; ++ ok $err; + } + + Apache2::Const::OK; +--- a/t/filter/TestFilter/in_str_msg.pm 2011-02-08 02:00:11.000000000 +0000 ++++ b/t/filter/TestFilter/in_str_msg.pm 2013-01-04 16:08:27.000000000 +0000 +@@ -76,10 +76,10 @@ + sub response { + my $r = shift; + +- plan $r, tests => 1; +- + my $received = TestCommon::Utils::read_post($r); + ++ plan $r, tests => 1; ++ + ok t_cmp($received, $expected, + "request filter must have upcased the data"); + +--- a/t/response/TestModperl/post_utf8.pm 2011-02-08 02:00:12.000000000 +0000 ++++ b/t/response/TestModperl/post_utf8.pm 2013-01-04 16:04:39.000000000 +0000 +@@ -29,14 +29,14 @@ + # $r->content_type("text/plain; charset=utf-8"); + # $r->print("expected: $expected_utf8\n"); + ++ my $received = TestCommon::Utils::read_post($r) || ""; ++ + # utf encode/decode was added only in 5.8.0 + # XXX: currently binmode is only available with perlio (used on the + # server side on the tied/perlio STDOUT) + plan $r, tests => 2, + need need_min_perl_version(5.008), need_perl('perlio'); + +- my $received = TestCommon::Utils::read_post($r) || ""; +- + # workaround for perl-5.8.0, which doesn't decode correctly a + # tainted variable + require ModPerl::Util; diff -Nru libapache2-mod-perl2-2.0.7/debian/patches/series libapache2-mod-perl2-2.0.7/debian/patches/series --- libapache2-mod-perl2-2.0.7/debian/patches/series 2012-05-19 18:38:42.000000000 +0100 +++ libapache2-mod-perl2-2.0.7/debian/patches/series 2013-01-05 18:20:16.000000000 +0000 @@ -10,3 +10,4 @@ 210_fix-pod-errors.patch 220_fix-bad-whatis-entry.patch 250-lfs-perl-5.14.patch +260_fix_pipelined_response_deadlock.patch