a Java class path entry has to be a plain local file URL

with no host and an absolute path

follow on from "translate only file URLs"
(Change-Id I41076b8af670d673bf29b14c02db0c66744feb0b)

Signed-off-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Change-Id: I6025f3e627c51d83479e7f79a53841384b326442
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/13322
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Stephan Bergmann <stephan.bergmann@collabora.com>
Reviewed-by: Michael Stahl <michael.stahl@collabora.com>
(cherry picked from commit cb4680770e2d558fa474fb7d3e3483885941d70a)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211548
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
This commit is contained in:
Caolán McNamara
2026-09-29 14:14:53 +02:00
committed by Xisco Fauli
parent 8937f0d490
commit 5026a97e2e
+16 -1
View File
@@ -33,6 +33,7 @@
#include <com/sun/star/uri/XVndSunStarExpandUrlReference.hpp> #include <com/sun/star/uri/XVndSunStarExpandUrlReference.hpp>
#include <com/sun/star/util/theMacroExpander.hpp> #include <com/sun/star/util/theMacroExpander.hpp>
#include <cppuhelper/exc_hlp.hxx> #include <cppuhelper/exc_hlp.hxx>
#include <rtl/uri.hxx>
#include <rtl/ustring.hxx> #include <rtl/ustring.hxx>
#include <sal/types.h> #include <sal/types.h>
#include <o3tl/string_view.hxx> #include <o3tl/string_view.hxx>
@@ -79,7 +80,21 @@ jobjectArray jvmaccess::ClassPath::translateToUrls(
} }
css::uno::Reference< css::uri::XUriReference > uriRef( css::uno::Reference< css::uri::XUriReference > uriRef(
css::uri::UriReferenceFactory::create(context)->parse(url)); 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( throw css::lang::IllegalArgumentException(
"non-local Java class path entry: " + url, "non-local Java class path entry: " + url,