This is an automated email from the ASF dual-hosted git repository. reta pushed a commit to branch 3.4.x-fixes in repository https://gitbox.apache.org/repos/asf/cxf.git
commit a8e465dae077d373cbadc477c441860e21e53d62 Author: Andriy Redko <[email protected]> AuthorDate: Wed Aug 4 09:11:49 2021 -0400 CXF-8572: Incorrectly parsed ETag when contains 'W/' as part of the content (#830) (cherry picked from commit c29b1c23a7e09f9fe2c5412d0b9ece1bafb7c89c) --- .../org/apache/cxf/jaxrs/impl/EntityTagHeaderProvider.java | 11 ++++++----- .../apache/cxf/jaxrs/impl/EntityTagHeaderProviderTest.java | 4 +++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProvider.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProvider.java index 77fb71e..e45f6d1 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProvider.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProvider.java @@ -39,16 +39,17 @@ public class EntityTagHeaderProvider implements HeaderDelegate<EntityTag> { String tag = null; boolean weak = false; - int i = header.indexOf(WEAK_PREFIX); - if (i != -1) { + final String trimmed = header.trim(); + // See please https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag for weak validator + if (trimmed.startsWith(WEAK_PREFIX)) { weak = true; - if (i + 2 < header.length()) { - tag = header.substring(i + 2); + if (trimmed.length() > 2) { + tag = trimmed.substring(2); } else { return new EntityTag("", weak); } } else { - tag = header; + tag = trimmed; } if (tag.length() > 0 && !tag.startsWith("\"") && !tag.endsWith("\"")) { return new EntityTag(tag, weak); diff --git a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProviderTest.java b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProviderTest.java index 777cb21..70edd7a 100644 --- a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProviderTest.java +++ b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/EntityTagHeaderProviderTest.java @@ -39,7 +39,9 @@ public class EntityTagHeaderProviderTest { tag = EntityTag.valueOf("W/\"12345\""); assertTrue(tag.isWeak() && "12345".equals(tag.getValue())); tag = EntityTag.valueOf("\"12345\""); - assertFalse(tag.isWeak() && "12345".equals(tag.getValue())); + assertTrue(!tag.isWeak() && "12345".equals(tag.getValue())); + tag = EntityTag.valueOf("\"wyoBLW/ye71RgN/0LNyj4eA5rfE1ovtlM03aakuGr2Y=\""); + assertTrue(!tag.isWeak() && "wyoBLW/ye71RgN/0LNyj4eA5rfE1ovtlM03aakuGr2Y=".equals(tag.getValue())); } @Test
