[
https://issues.apache.org/jira/browse/LOG4J2-3568?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17577148#comment-17577148
]
Ralph Goers commented on LOG4J2-3568:
-------------------------------------
Yes, please do. I always run a full local build before committing a PR anyway,
unless the change is trivial.
> ResolverUtil fails to extractPath for custom plugins in jar, if there are
> blanks in the path
> --------------------------------------------------------------------------------------------
>
> Key: LOG4J2-3568
> URL: https://issues.apache.org/jira/browse/LOG4J2-3568
> Project: Log4j 2
> Issue Type: Bug
> Components: Configuration
> Affects Versions: 2.17.2
> Environment: Windows 10
> Windows Server 2019
> Reporter: Sven Seelig
> Priority: Major
>
> We are using plugins in our config, e.g.:
> {noformat}
> "configuration": {
> "name": "MyAppLog4JConfig",
> "packages": "de.mycompany.myapp.adapter.log4j.plugin",
> "properties": {
> ...
> "appenders": {
> ...
> "MyAppConsole": {
> "name": "MyApp-Console-Appender",
> "PatternLayout": {
> "pattern": "${sysPatternlayout}",
> "charset": "UTF-8"
> }
> {noformat}
> Everything works fine until the installation path of our application contains
> one or more blanks, e.g. "C:\Program Files\MyApp_13.0.1".
>
> The plugin classes and the log4j2.json are delivered within jar files
> (different jar files, same folder). The config-file itself is found and read.
> We are accessing the context in a standard way:
> {code:java}
> LoggerContext log4j2LoggerContext =
> (org.apache.logging.log4j.core.LoggerContext)
> org.apache.logging.log4j.LogManager.getContext(true);
> {code}
>
> While trying to extract the path to our custom plugins, the PluginManager
> lands here:
> org.apache.logging.log4j.core.config.plugins.util.ResolverUtil#extractPath
> {code:java}
> String extractPath(final URL url) throws UnsupportedEncodingException,
> URISyntaxException {
> String urlPath = url.getPath(); // same as getFile but without the Query
> portion
> [...]
> // For jar: URLs, the path part starts with "file:"
> if (urlPath.startsWith("file:")) {
> urlPath = urlPath.substring(5);
> }
> // If it was in a JAR, grab the path to the jar
> final int bangIndex = urlPath.indexOf('!');
> if (bangIndex > 0) {
> urlPath = urlPath.substring(0, bangIndex);
> }
> [...]
> final String cleanPath = new URI(urlPath).getPath(); {code}
> Problem is, if the urlPath contains blank(s), the new URI(...) call will
> throw an URISyntaxException and the plugins are not loaded.
> Simple solution would be an additional check and replacement of the blanks
> with "%20". This would solve our problem with blanks but as stated in the
> comments, a solution that encodes the path would also take other cases of
> special characters into account.
> So this solutions with encoding works for us too (tested with blanks in path
> only).
> {code:java}
> String encodedPath = URLEncoder.encode(urlPath,
> StandardCharsets.UTF_8.name());
> final String cleanPath = new URI(encodedPath).getPath();
> {code}
> We built the current release-2,x from the repo
> ([https://gitbox.apache.org/repos/asf/logging-log4j2.git]), had the same
> issue as before (2.17.2) but with the encoding added it works.
> As we can't run the maven build with tests (there seems to be a proxy issue
> for the MongoDB Tests), we decided not to open a pull-request. Please let us
> know, if you prefer a pull-request or if you need further information.
> (i) We are using the log4j-bridge at the moment, maybe this issue only shows
> up when using this besides log4j2 core and api (i)
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)