From f51969c129a244cad45b4ae387b1dd563e7175d2 Mon Sep 17 00:00:00 2001 From: Arturo Bernal Date: Sat, 14 Nov 2026 16:41:42 +0100 Subject: [PATCH] HTTPCORE-804: H2Config.copy() does not copy maxContinuations The copied builder silently reset the limit to the default (100), even when the source config had a custom value. The only production caller (WebSocketH2ServerBootstrap, client repo) always goes through copy() since push is on by default, so a configured limit never took effect. --- .../main/java/org/apache/hc/core5/http2/config/H2Config.java | 3 ++- .../java/org/apache/hc/core5/http2/config/H2ConfigTest.java | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/config/H2Config.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/config/H2Config.java index b8a2c376d4..86150bf1a9 100644 --- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/config/H2Config.java +++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/config/H2Config.java @@ -142,7 +142,8 @@ public static H2Config.Builder copy(final H2Config config) { .setInitialWindowSize(config.getInitialWindowSize()) .setMaxFrameSize(config.getMaxFrameSize()) .setMaxHeaderListSize(config.getMaxHeaderListSize()) - .setCompressionEnabled(config.isCompressionEnabled()); + .setCompressionEnabled(config.isCompressionEnabled()) + .setMaxContinuations(config.getMaxContinuations()); } public static class Builder { diff --git a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/config/H2ConfigTest.java b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/config/H2ConfigTest.java index a6a2859d5f..2314af45b5 100644 --- a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/config/H2ConfigTest.java +++ b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/config/H2ConfigTest.java @@ -72,6 +72,7 @@ void copy() { .setMaxFrameSize(16384) .setPushEnabled(true) .setCompressionEnabled(true) + .setMaxContinuations(5) .build(); final H2Config.Builder builder = H2Config.copy(h2Config); @@ -82,7 +83,8 @@ void copy() { () -> assertEquals(h2Config.getInitialWindowSize(), h2Config2.getInitialWindowSize()), () -> assertEquals(h2Config.getMaxConcurrentStreams(), h2Config2.getMaxConcurrentStreams()), () -> assertEquals(h2Config.getMaxFrameSize(), h2Config2.getMaxFrameSize()), - () -> assertEquals(h2Config.getMaxHeaderListSize(), h2Config2.getMaxHeaderListSize()) + () -> assertEquals(h2Config.getMaxHeaderListSize(), h2Config2.getMaxHeaderListSize()), + () -> assertEquals(h2Config.getMaxContinuations(), h2Config2.getMaxContinuations()) ); }