This is an automated email from the ASF dual-hosted git repository.
joerghoh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-api.git
The following commit(s) were added to refs/heads/master by this push:
new 1074009 SLING-13424 ResourceUtil.unescapeName() should not throw on
backslashes (#92)
1074009 is described below
commit 1074009cd625d7fb9a0643b526e5ed34745384e2
Author: Jörg Hoh <[email protected]>
AuthorDate: Fri Nov 13 13:43:56 2026 +0100
SLING-13424 ResourceUtil.unescapeName() should not throw on backslashes
(#92)
---
.../java/org/apache/sling/api/resource/ResourceUtil.java | 2 +-
.../org/apache/sling/api/resource/ResourceUtilTest.java | 13 +++++++++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/apache/sling/api/resource/ResourceUtil.java
b/src/main/java/org/apache/sling/api/resource/ResourceUtil.java
index 374e2f3..f1bc956 100644
--- a/src/main/java/org/apache/sling/api/resource/ResourceUtil.java
+++ b/src/main/java/org/apache/sling/api/resource/ResourceUtil.java
@@ -351,7 +351,7 @@ public class ResourceUtil {
while (matcher.find()) {
String unicodeSequence = matcher.group();
char unicodeChar = (char)
Integer.parseInt(unicodeSequence.substring(2), 16);
- matcher.appendReplacement(decodedString,
Character.toString(unicodeChar));
+ matcher.appendReplacement(decodedString,
Matcher.quoteReplacement(Character.toString(unicodeChar)));
}
matcher.appendTail(decodedString);
return decodedString.toString();
diff --git a/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java
b/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java
index b957bd0..263c5e8 100644
--- a/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java
+++ b/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java
@@ -449,4 +449,17 @@ public class ResourceUtilTest {
assertEquals(nameWithSpecialChars,
ResourceUtil.unescapeName(escapedName));
assertFalse(escapedName.contains("."));
}
+
+ @Test
+ public void testEscapeAndUnescapeNameWithBackslashes() {
+ for (String name : new String[] {"a\\b", "trailing\\",
"two\\\\backslashes"}) {
+ assertEquals(name,
ResourceUtil.unescapeName(ResourceUtil.escapeName(name)));
+ }
+ }
+
+ @Test
+ public void testUnescapeNameWithReplacementCharacters() {
+ assertEquals("\\", ResourceUtil.unescapeName("\\u005C"));
+ assertEquals("$x", ResourceUtil.unescapeName("\\u0024x"));
+ }
}