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