This is an automated email from the ASF dual-hosted git repository. ardovm pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit 7456e17c83b8fcc5806811ffdb156c6b3daf5785 Author: Peter <[email protected]> AuthorDate: Sat Sep 26 22:16:30 2026 +0200 Tests for: accept local files Co-Authored-By: Claude Opus 5.5 <[email protected]> (cherry picked from commit 6af66d39c39162852c7402525ae40100cf9acca9) --- main/connectivity/qa/complex/sdbc/ToolsTest.java | 45 ++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/main/connectivity/qa/complex/sdbc/ToolsTest.java b/main/connectivity/qa/complex/sdbc/ToolsTest.java index 3e5d1a9f85..ed0b6720a9 100644 --- a/main/connectivity/qa/complex/sdbc/ToolsTest.java +++ b/main/connectivity/qa/complex/sdbc/ToolsTest.java @@ -108,6 +108,51 @@ public final class ToolsTest { assertTrue(collect("jar:wibble:/opt/a.jar!/").isEmpty()); } + @Test + public void testAddClassPathURLAddsLocalhostAndEscapedLocalFile() { + assertEquals(1, collect("file://localhost/opt/a.jar").size()); + assertEquals(1, collect("file:///opt/Program%20Files/a.jar").size()); + assertEquals(1, collect("file:///opt/a%2Fb/c.jar").size()); + // One level of decoding only: this names a file called "%5C%5Chost". + assertEquals(1, collect("file:///opt/%255C%255Chost/a.jar").size()); + } + + @Test + public void testAddClassPathURLSkipsFileOnAnotherHost() { + assertTrue(collect( + "file://host/share/a.jar", + "file://wsl.localhost/distro/a.jar", + "jar:file://host/share/b.jar!/").isEmpty()); + } + + @Test + public void testAddClassPathURLSkipsPathNamingAnotherHost() { + assertTrue(collect( + "file:////host/share/a.jar", + "file://localhost//host/share/b.jar", + "jar:file:////host/share/c.jar!/").isEmpty()); + } + + @Test + public void testAddClassPathURLSkipsEscapedSeparatorNamingAnotherHost() { + // The file: handler decodes the path and, on Windows, turns slashes + // into backslashes, so each of these would be opened as \\host\share. + assertTrue(collect( + "file:///%5C%5Chost/share/a.jar", + "file:///%5c%5chost/share/b.jar", + "file:///%2F%2Fhost/share/c.jar", + "file:/%2Fhost/share/d.jar", + "file://localhost/%5C%5Chost/share/e.jar", + "jar:file:///%5C%5Chost/share/f.jar!/").isEmpty()); + } + + @Test + public void testAddClassPathURLSkipsBackslash() { + assertTrue(collect( + "file:\\\\host\\share\\a.jar", + "file:///C:%5C..%5Cb.jar").isEmpty()); + } + @Test public void testAddClassPathURLKeepsOnlyLocalEntriesInOrder() { List<URL> urls = collect(
