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

joerghoh pushed a commit to branch SLING-13424
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-api.git

commit d99051e5c6748e8e261effa35e51aeb7ac30c293
Author: Joerg Hoh <[email protected]>
AuthorDate: Thu Nov 12 13:49:32 2026 +0100

    SLING-13424 ResourceUtil.unescapeName() should not throw on backslashes
---
 .../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 e3355cf..d17a5ec 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"));
+    }
 }

Reply via email to