Ion Moldovan created HTTPCORE-513:

             Summary: ExpandableBuffer breaks on large response
                 Key: HTTPCORE-513
             Project: HttpComponents HttpCore
          Issue Type: Bug
          Components: HttpCore, HttpCore NIO
    Affects Versions: 4.4.9
            Reporter: Ion Moldovan

 # create a PHP page with the following content: 
 ## <?php
echo str_pad($response, 2147483647);
 # send a request using jMeter to the said page

Expected result: the request is received

Actual result: the VM fails with:

java.lang.OutOfMemoryError: Requested array size exceeds VM limit
Dumping heap to java_pid20344.hprof ...
Heap dump file created [3275879706 bytes in 7.490 secs]
Uncaught Exception java.lang.OutOfMemoryError: Requested array size exceeds VM 
limit. See log file for details.


Proposed solution:
 * rewrite org.apache.http.nio.util.ExpandableBuffer.expand() to:
 ** /**
 * Expands buffer's capacity.
 protected void expand() {
 int newcapacity = (this.buffer.capacity() + 1) << 1;
 if (newcapacity < 0) {
 int headRoom = Integer.max(Long.BYTES, 8);
 // Long has the longest header available. Object header seems to be linked to 
it. Equals the number of bits of the platform.
 // I added a minimum of 8 (it is used in ArrayList: private static final int 
MAX_ARRAY_SIZE = 2147483639;)
 // WARNING: This code assumes you are providing enough heap room with -Xmx.
 // source of inspiration:
 newcapacity = Integer.MAX_VALUE - headRoom;


This message was sent by Atlassian JIRA

To unsubscribe, e-mail:
For additional commands, e-mail:

Reply via email to