This is an automated email from the ASF dual-hosted git repository.

vy pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/release-2.x by this push:
     new 78c6847  Fixes StringIndexOutOfBoundsException in PropertiesUtilTest. 
(#729)
78c6847 is described below

commit 78c68473e2c81432c5bc3e5ba8d93b463ecfa2d9
Author: ppkarwasz <[email protected]>
AuthorDate: Thu Jan 27 16:28:15 2022 +0100

    Fixes StringIndexOutOfBoundsException in PropertiesUtilTest. (#729)
    
    `PropertiesUtilTest#partitionOnCommonPrefixes` fails if a property does
    not contain any dots.
    
    The bug appears when parsing a `log4j2.properties` like in [this
    StackOverflow question](https://stackoverflow.com/q/70851549/11748454).
---
 .../src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java | 6 ++++--
 .../test/java/org/apache/logging/log4j/util/PropertiesUtilTest.java | 3 ++-
 log4j-api/src/test/resources/PropertiesUtilTest.properties          | 3 +++
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java 
b/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java
index fe0f8ff..0fe8502 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java
@@ -551,11 +551,13 @@ public final class PropertiesUtil {
     public static Map<String, Properties> partitionOnCommonPrefixes(final 
Properties properties) {
         final Map<String, Properties> parts = new ConcurrentHashMap<>();
         for (final String key : properties.stringPropertyNames()) {
-            final String prefix = key.substring(0, key.indexOf('.'));
+            final int idx = key.indexOf('.');
+            if (idx < 0) continue;
+            final String prefix = key.substring(0, idx);
             if (!parts.containsKey(prefix)) {
                 parts.put(prefix, new Properties());
             }
-            parts.get(prefix).setProperty(key.substring(key.indexOf('.') + 1), 
properties.getProperty(key));
+            parts.get(prefix).setProperty(key.substring(idx + 1), 
properties.getProperty(key));
         }
         return parts;
     }
diff --git 
a/log4j-api/src/test/java/org/apache/logging/log4j/util/PropertiesUtilTest.java 
b/log4j-api/src/test/java/org/apache/logging/log4j/util/PropertiesUtilTest.java
index da9d18b..7f0d1c7 100644
--- 
a/log4j-api/src/test/java/org/apache/logging/log4j/util/PropertiesUtilTest.java
+++ 
b/log4j-api/src/test/java/org/apache/logging/log4j/util/PropertiesUtilTest.java
@@ -45,7 +45,8 @@ public class PropertiesUtilTest {
         assertHasAllProperties(PropertiesUtil.extractSubset(properties, "b."));
         assertHasAllProperties(PropertiesUtil.extractSubset(properties, 
"c.1"));
         assertHasAllProperties(PropertiesUtil.extractSubset(properties, "dd"));
-        assertEquals(0, properties.size());
+        // One invalid entry remains
+        assertEquals(1, properties.size());
     }
 
     @Test
diff --git a/log4j-api/src/test/resources/PropertiesUtilTest.properties 
b/log4j-api/src/test/resources/PropertiesUtilTest.properties
index 46e67d5..7b8837c 100644
--- a/log4j-api/src/test/resources/PropertiesUtilTest.properties
+++ b/log4j-api/src/test/resources/PropertiesUtilTest.properties
@@ -27,3 +27,6 @@ c.1.3 = 3
 dd.1 = 1
 dd.2 = 2
 dd.3 = 3
+
+# Dotless entry, should be ignored
+a = invalid
\ No newline at end of file

Reply via email to