From 51d078004155a134149e28679385ebe95abbd20b Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Thu, 13 Aug 2020 18:23:26 +0200 Subject: [PATCH] Issue #5104 - AbstractProxyServlet include incorrect protocol version in Via header when accessed over H2. Fixed HttpFields.computeField() removal loop. Signed-off-by: Simone Bordet --- .../src/main/java/org/eclipse/jetty/http/HttpFields.java | 2 +- .../test/java/org/eclipse/jetty/http/HttpFieldsTest.java | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpFields.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpFields.java index e436ded5d348..7836badc60b7 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpFields.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpFields.java @@ -218,7 +218,7 @@ private void computeField(T header, BiFunction, HttpField } // Remember and remove additional fields found.add(f); - remove(i); + remove(i--); } } diff --git a/jetty-http/src/test/java/org/eclipse/jetty/http/HttpFieldsTest.java b/jetty-http/src/test/java/org/eclipse/jetty/http/HttpFieldsTest.java index 2e1978d125e2..c9fe4adcb90e 100644 --- a/jetty-http/src/test/java/org/eclipse/jetty/http/HttpFieldsTest.java +++ b/jetty-http/src/test/java/org/eclipse/jetty/http/HttpFieldsTest.java @@ -885,11 +885,12 @@ public void testComputeField() header.add(new HttpField("After", "value")); assertThat(header.stream().map(HttpField::toString).collect(Collectors.toList()), contains("Before: value", "Test: one", "After: value")); - header.add(new HttpField("Test", "extra")); - assertThat(header.stream().map(HttpField::toString).collect(Collectors.toList()), contains("Before: value", "Test: one", "After: value", "Test: extra")); + header.add(new HttpField("Test", "two")); + header.add(new HttpField("Test", "three")); + assertThat(header.stream().map(HttpField::toString).collect(Collectors.toList()), contains("Before: value", "Test: one", "After: value", "Test: two", "Test: three")); header.computeField("Test", (n, f) -> new HttpField("TEST", "count=" + f.size())); - assertThat(header.stream().map(HttpField::toString).collect(Collectors.toList()), contains("Before: value", "TEST: count=2", "After: value")); + assertThat(header.stream().map(HttpField::toString).collect(Collectors.toList()), contains("Before: value", "TEST: count=3", "After: value")); header.computeField("TEST", (n, f) -> null); assertThat(header.stream().map(HttpField::toString).collect(Collectors.toList()), contains("Before: value", "After: value"));