hc-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ol...@apache.org
Subject svn commit: r1386795 - in /httpcomponents/httpcore/branches/4.2.x: RELEASE_NOTES.txt httpcore-nio/src/main/java/org/apache/http/impl/nio/codecs/LengthDelimitedEncoder.java
Date Mon, 17 Sep 2012 19:58:17 GMT
Author: olegk
Date: Mon Sep 17 19:58:17 2012
New Revision: 1386795

URL: http://svn.apache.org/viewvc?rev=1386795&view=rev
Log:
HTTPCORE-312: LengthDelimitedEncoder incorrectly handles messages larger than 2GB

Modified:
    httpcomponents/httpcore/branches/4.2.x/RELEASE_NOTES.txt
    httpcomponents/httpcore/branches/4.2.x/httpcore-nio/src/main/java/org/apache/http/impl/nio/codecs/LengthDelimitedEncoder.java

Modified: httpcomponents/httpcore/branches/4.2.x/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/branches/4.2.x/RELEASE_NOTES.txt?rev=1386795&r1=1386794&r2=1386795&view=diff
==============================================================================
--- httpcomponents/httpcore/branches/4.2.x/RELEASE_NOTES.txt (original)
+++ httpcomponents/httpcore/branches/4.2.x/RELEASE_NOTES.txt Mon Sep 17 19:58:17 2012
@@ -1,12 +1,18 @@
 Release 4.2.2
 -------------------
 
-This is a maintenance release that fixes a number of bugs and regressions found since 4.2.1.

-Users of HttpCore 4.2 are encouraged to upgrade.
+This is a maintenance release that fixes a number of bugs and regressions found since 4.2.1
+including a major bug in NIO module causing incorrectly handling of outgoing Content-Length
+delimited messages larger than 2GB.
+
+Users of HttpCore 4.2 are advised to upgrade.
 
 Changelog
 -------------------
 
+* [HTTPCORE-312] NIO length delimited content encoder incorrectly handles messages larger
than 2GB.
+  Contributed by Oleg Kalnichevski <olegk at apache.org>
+
 * [HTTPCORE-310] Fixed regression in DefaultConnectionReuseStrategy causing it to incorrectly

   flag connections as non-reusable after a 204, 205 or 304 response. 
   Contributed by Oleg Kalnichevski <olegk at apache.org>

Modified: httpcomponents/httpcore/branches/4.2.x/httpcore-nio/src/main/java/org/apache/http/impl/nio/codecs/LengthDelimitedEncoder.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/branches/4.2.x/httpcore-nio/src/main/java/org/apache/http/impl/nio/codecs/LengthDelimitedEncoder.java?rev=1386795&r1=1386794&r2=1386795&view=diff
==============================================================================
--- httpcomponents/httpcore/branches/4.2.x/httpcore-nio/src/main/java/org/apache/http/impl/nio/codecs/LengthDelimitedEncoder.java
(original)
+++ httpcomponents/httpcore/branches/4.2.x/httpcore-nio/src/main/java/org/apache/http/impl/nio/codecs/LengthDelimitedEncoder.java
Mon Sep 17 19:58:17 2012
@@ -76,12 +76,12 @@ public class LengthDelimitedEncoder exte
             return 0;
         }
         assertNotCompleted();
-        int lenRemaining = (int) (this.contentLength - this.len);
+        int chunk = (int) Math.min((this.contentLength - this.len), Integer.MAX_VALUE);
 
         int bytesWritten;
-        if (src.remaining() > lenRemaining) {
+        if (src.remaining() > chunk) {
             int oldLimit = src.limit();
-            int newLimit = oldLimit - (src.remaining() - lenRemaining);
+            int newLimit = oldLimit - (src.remaining() - chunk);
             src.limit(newLimit);
             bytesWritten = this.channel.write(src);
             src.limit(oldLimit);
@@ -107,13 +107,8 @@ public class LengthDelimitedEncoder exte
             return 0;
         }
         assertNotCompleted();
-        int lenRemaining = (int) (this.contentLength - this.len);
-
-        long bytesWritten;
-        if (count > lenRemaining) {
-            count = lenRemaining;
-        }
-        bytesWritten = src.transferTo(position, count, this.channel);
+        long chunk = Math.min((this.contentLength - this.len), count);
+        long bytesWritten = src.transferTo(position, chunk, this.channel);
         if (bytesWritten > 0) {
             this.metrics.incrementBytesTransferred(bytesWritten);
         }



Mime
View raw message