[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#697929: unblock: libapache2-mod-perl2/2.0.7-2



Package: release.debian.org
Severity: normal
User: release.debian.org@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 <dom@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

Reply to: