Something for the release notes?

Gary

On Tue, Feb 13, 2018 at 11:29 AM, <ol...@apache.org> wrote:

> Repository: httpcomponents-core
> Updated Branches:
>   refs/heads/4.4.x 7bfffc547 -> 11909bdcc
>
>
> ExpandableBuffer breaks on large response
>
> Ticket: https://issues.apache.org/jira/browse/HTTPCORE-513
> This closes #58
>
>
> Project: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/repo
> Commit: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/
> commit/11909bdc
> Tree: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/
> tree/11909bdc
> Diff: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/
> diff/11909bdc
>
> Branch: refs/heads/4.4.x
> Commit: 11909bdcc33fbc29037338d870dd2f8a4e507ec7
> Parents: 7bfffc5
> Author: imoldovan-intacct <imoldo...@intacct.com>
> Authored: Mon Feb 12 17:02:06 2018 +0200
> Committer: Oleg Kalnichevski <ol...@apache.org>
> Committed: Tue Feb 13 19:27:40 2018 +0100
>
> ----------------------------------------------------------------------
>  .../org/apache/http/nio/util/ExpandableBuffer.java    | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/httpcomponents-core/
> blob/11909bdc/httpcore-nio/src/main/java/org/apache/http/
> nio/util/ExpandableBuffer.java
> ----------------------------------------------------------------------
> diff --git 
> a/httpcore-nio/src/main/java/org/apache/http/nio/util/ExpandableBuffer.java
> b/httpcore-nio/src/main/java/org/apache/http/nio/util/
> ExpandableBuffer.java
> index 7e06da4..74b5765 100644
> --- a/httpcore-nio/src/main/java/org/apache/http/nio/util/
> ExpandableBuffer.java
> +++ b/httpcore-nio/src/main/java/org/apache/http/nio/util/
> ExpandableBuffer.java
> @@ -116,7 +116,19 @@ public class ExpandableBuffer implements BufferInfo,
> org.apache.http.nio.util.Bu
>      protected void expand() {
>          int newcapacity = (this.buffer.capacity() + 1) << 1;
>          if (newcapacity < 0) {
> -            newcapacity = Integer.MAX_VALUE;
> +            final int vmBytes = Long.SIZE >> 3;
> +            final int javaBytes = 8; // this is to be checked when the
> JVM version changes
> +            @SuppressWarnings("unused") // we really need the 8 if we're
> going to make this foolproof
> +            final int headRoom = (vmBytes >= javaBytes) ? vmBytes :
> javaBytes;
> +            // Reason: In GC the size of objects is passed as int (2
> bytes).
> +            // Then, the header size of the objects is added to the size.
> +            // Long has the longest header available. Object header seems
> to be linked to it.
> +            // Details: I added a minimum of 8 just to be safe and
> because 8 is used in
> +            // java.lang.Object.ArrayList: private static final int
> MAX_ARRAY_SIZE = 2147483639.
> +            //
> +            // WARNING: This code assumes you are providing enough heap
> room with -Xmx.
> +            // source of inspiration: https://bugs.openjdk.java.net/
> browse/JDK-8059914
> +            newcapacity = Integer.MAX_VALUE - headRoom;
>          }
>          expandCapacity(newcapacity);
>      }
>
>

Reply via email to