From 5026a97e2ed96f7e1fe90e59f67d23cf77b25812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Tue, 22 Sep 2026 14:41:49 +0000 Subject: [PATCH] a Java class path entry has to be a plain local file URL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit with no host and an absolute path follow on from "translate only file URLs" (Change-Id I41076b8af670d673bf29b14c02db0c66744feb0b) Signed-off-by: Caolán McNamara Change-Id: I6025f3e627c51d83479e7f79a53841384b326442 Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/13322 Tested-by: Jenkins CPCI Reviewed-by: Stephan Bergmann Reviewed-by: Michael Stahl (cherry picked from commit cb4680770e2d558fa474fb7d3e3483885941d70a) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211548 Tested-by: Jenkins Reviewed-by: Xisco Fauli --- jvmaccess/source/classpath.cxx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/jvmaccess/source/classpath.cxx b/jvmaccess/source/classpath.cxx index bb0b16bc0220..b4c6331e6113 100644 --- a/jvmaccess/source/classpath.cxx +++ b/jvmaccess/source/classpath.cxx @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -79,7 +80,21 @@ jobjectArray jvmaccess::ClassPath::translateToUrls( } css::uno::Reference< css::uri::XUriReference > uriRef( css::uri::UriReferenceFactory::create(context)->parse(url)); - if (!uriRef.is() || !uriRef->getScheme().equalsIgnoreAsciiCase("file")) + bool bLocal = uriRef.is() && uriRef->getScheme().equalsIgnoreAsciiCase("file"); + if (bLocal && uriRef->hasAuthority()) + { + OUString aAuthority(uriRef->getAuthority()); + bLocal = aAuthority.isEmpty() || aAuthority.equalsIgnoreAsciiCase("localhost"); + } + if (bLocal) + { + // Java reads a path that starts with two separators as a network share name. + OUString aPath(rtl::Uri::decode(uriRef->getPath(), rtl_UriDecodeWithCharset, + RTL_TEXTENCODING_UTF8)); + bLocal = aPath.getLength() >= 2 && aPath[0] == '/' && aPath[1] != '/' + && aPath[1] != '\\'; + } + if (!bLocal) { throw css::lang::IllegalArgumentException( "non-local Java class path entry: " + url,