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

Bug#591462: libwww-perl: redo; outside the scope of the module (LWP/Protocol/http.pm)



clone     591462 -1
submitter -1 !
reassign  -1 release.debian.org
retitle   -1 pu: libwww-perl/5.813-1+lenny1
tag       -1 =
severity  -1 normal
user      release.debian.org@packages.debian.org
usertag   -1 + pu
thanks

Hi,

libwww-perl uses Perl's redo statement incorrectly [1].  This breaks
programs that cause libwww-perl to send a header larger than
8k bytes (and maybe others).  This was fixed upstream with the patch
from [2].

I have prepared an update for stable using upstream's patch.  Is the
release team okay with uploading this to stable?

Regards,
Ansgar

[1] <http://bugs.debian.org/591462>
[2] <http://rt.cpan.org/Public/Bug/Display.html?id=41116>
diff -u libwww-perl-5.813/debian/changelog libwww-perl-5.813/debian/changelog
--- libwww-perl-5.813/debian/changelog
+++ libwww-perl-5.813/debian/changelog
@@ -1,3 +1,9 @@
+libwww-perl (5.813-1+lenny1) stable; urgency=low
+
+  * Fix incorrect use of redo. (Closes: #591462)
+
+ -- Ansgar Burchardt <ansgar@43-1.org>  Wed, 04 Aug 2010 02:52:22 +0900
+
 libwww-perl (5.813-1) unstable; urgency=low
 
   * New upstream release.
only in patch2:
unchanged:
--- libwww-perl-5.813.orig/lib/LWP/Protocol/http.pm
+++ libwww-perl-5.813/lib/LWP/Protocol/http.pm
@@ -203,15 +203,16 @@
     #print "------\n$req_buf\n------\n";
 
     if (!$has_content || $write_wait || $has_content > 8*1024) {
-        do {
+      WRITE:
+        {
             # Since this just writes out the header block it should almost
             # always succeed to send the whole buffer in a single write call.
             my $n = $socket->syswrite($req_buf, length($req_buf));
             unless (defined $n) {
-                redo if $!{EINTR};
+                redo WRITE if $!{EINTR};
                 if ($!{EAGAIN}) {
                     select(undef, undef, undef, 0.1);
-                    redo;
+                    redo WRITE;
                 }
                 die "write failed: $!";
             }
@@ -221,8 +222,8 @@
             else {
                 select(undef, undef, undef, 0.5);
             }
+            redo WRITE if length $req_buf;
         }
-        while (length $req_buf);
     }
 
     my($code, $mess, @junk);

Reply to: