diff --git a/lib/trino-hdfs/src/main/java/io/trino/filesystem/hdfs/HadoopPaths.java b/lib/trino-hdfs/src/main/java/io/trino/filesystem/hdfs/HadoopPaths.java index 0e42a5fe4faf..28bc715c647e 100644 --- a/lib/trino-hdfs/src/main/java/io/trino/filesystem/hdfs/HadoopPaths.java +++ b/lib/trino-hdfs/src/main/java/io/trino/filesystem/hdfs/HadoopPaths.java @@ -42,6 +42,7 @@ private static URI toPathEncodedUri(Location location) location.scheme().orElse(null), location.host().orElse(null), "/" + location.path(), + null, location.path()); } catch (URISyntaxException e) { diff --git a/lib/trino-hdfs/src/test/java/io/trino/hdfs/s3/TestS3HadoopPaths.java b/lib/trino-hdfs/src/test/java/io/trino/hdfs/s3/TestS3HadoopPaths.java index 7e0435cab4a9..ba4265ff915d 100644 --- a/lib/trino-hdfs/src/test/java/io/trino/hdfs/s3/TestS3HadoopPaths.java +++ b/lib/trino-hdfs/src/test/java/io/trino/hdfs/s3/TestS3HadoopPaths.java @@ -68,4 +68,14 @@ public void testS3NonCanonicalPathWithInvalidUriEscape() .extracting(TrinoS3FileSystem::keyFromPath) .isEqualTo("abc%xyz//test"); } + + @Test + public void testS3NonCanonicalPathWithDotDigitBucketName() + { + assertThat(hadoopPath(Location.of("s3://test.123/abc//xyz.csv"))) + .isEqualTo(new Path(URI.create("s3://test.123/abc/xyz.csv#abc//xyz.csv"))) + .hasToString("s3://test.123/abc/xyz.csv#abc//xyz.csv") + .extracting(TrinoS3FileSystem::keyFromPath) + .isEqualTo("abc//xyz.csv"); + } }