Sven Seelig created LOG4J2-3568:
-----------------------------------

             Summary: 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


We are using plugins in our config, e.g.:
{noformat}
"configuration": {
  "name": "DSSLog4JConfig",
  "packages": "de.schufa.dss.adapter.log4j.plugin",
  "properties": {
...
  "appenders": {
...
    "DssConsole": {
      "name": "Dss-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\DSS_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".
{code:java}
if(urlPath.contains(" ")){
    // System.out.println("Blank in URL detected, will fail as URI! Replacing 
with '%20'");
    urlPath = urlPath.replaceAll(" ", "%20");
}

final String cleanPath = new URI(urlPath).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 this check added and 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)

Reply via email to