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")); + } }
