From 2bf2996b7e43dd900c5483abc89db6a630059405 Mon Sep 17 00:00:00 2001 From: Oleg Kalnichevski Date: Sat, 31 Oct 2026 14:31:18 +0100 Subject: [PATCH] bug-fix: URIBuilder: Corrected optimization of path ending with '..' or '.' segment --- .../src/main/java/org/apache/hc/core5/net/URIBuilder.java | 2 +- .../test/java/org/apache/hc/core5/net/TestURIBuilder.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/httpcore5/src/main/java/org/apache/hc/core5/net/URIBuilder.java b/httpcore5/src/main/java/org/apache/hc/core5/net/URIBuilder.java index f5ca7afaa..218f300a5 100644 --- a/httpcore5/src/main/java/org/apache/hc/core5/net/URIBuilder.java +++ b/httpcore5/src/main/java/org/apache/hc/core5/net/URIBuilder.java @@ -1163,7 +1163,7 @@ static List optimizePathSegments(final List inputSegments) { } if (!inputSegments.isEmpty()) { final String lastSegment = inputSegments.get(inputSegments.size() - 1); - if (lastSegment.isEmpty()) { + if (lastSegment.isEmpty() || lastSegment.equals("..") || lastSegment.equals(".")) { outputSegments.addLast(""); } } diff --git a/httpcore5/src/test/java/org/apache/hc/core5/net/TestURIBuilder.java b/httpcore5/src/test/java/org/apache/hc/core5/net/TestURIBuilder.java index 42d0f00e2..fcef8d125 100644 --- a/httpcore5/src/test/java/org/apache/hc/core5/net/TestURIBuilder.java +++ b/httpcore5/src/test/java/org/apache/hc/core5/net/TestURIBuilder.java @@ -877,6 +877,12 @@ void testOptimize() throws Exception { new URIBuilder("file:../../.././").optimize().build().toASCIIString()); Assertions.assertEquals("http://host/", new URIBuilder("http://host/../../.././").optimize().build().toASCIIString()); + Assertions.assertEquals("http://host/a/", + new URIBuilder("http://host/a/b/..").optimize().build().toASCIIString()); + Assertions.assertEquals("http://host/a/b/", + new URIBuilder("http://host/a/b/.").optimize().build().toASCIIString()); + Assertions.assertEquals("http://host/a/b/..../...", + new URIBuilder("http://host/a/b/..../...").optimize().build().toASCIIString()); Assertions.assertThrows(URISyntaxException.class, () -> new URIBuilder("http:///../../.././").optimize().build().toASCIIString()); }