You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2023/03/29 16:29:55 UTC

svn commit: r1908783 - in /jackrabbit/trunk/jackrabbit-spi-commons/src: main/java/org/apache/jackrabbit/spi/commons/conversion/NameParser.java test/java/org/apache/jackrabbit/spi/commons/conversion/NameParserTest.java

Author: reschke
Date: Wed Mar 29 16:29:54 2023
New Revision: 1908783

URL: http://svn.apache.org/viewvc?rev=1908783&view=rev
Log:
JCR-4917: spi-commons: NameParser is too picky (allow non-ASCII whitespace)

Modified:
    jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/NameParser.java
    jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/conversion/NameParserTest.java

Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/NameParser.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/NameParser.java?rev=1908783&r1=1908782&r2=1908783&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/NameParser.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/NameParser.java Wed Mar 29 16:29:54 2023
@@ -96,7 +96,7 @@ public class NameParser {
                 trailingSpaces = true;
             } else if (c == '[' || c == ']' || c == '*' || c == '|') {
                 throw new IllegalNameException(asDisplayableString(c) + " not allowed in name");
-            } else if (Character.isWhitespace(c)) {
+            } else if (Character.isWhitespace(c) && c < 128) {
                 throw new IllegalNameException("Whitespace character " + asDisplayableString(c) + " not allowed in name");
             } else if (c == '/') {
                 if (state == STATE_URI_START) {
@@ -194,10 +194,20 @@ public class NameParser {
     }
 
     private static String asDisplayableString(char c) {
-        if (Character.isWhitespace(c)) {
-            return String.format("'\\u%04x'", (int)c);
+        if (c >= ' ' && c < 127) {
+            return Character.toString(c);
+        } else if (c == '\b') {
+            return "\\b";
+        } else if (c == '\f') {
+            return "\\f";
+        } else if (c == '\n') {
+            return "\\n";
+        } else if (c == '\r') {
+            return "\\r";
+        } else if (c == '\t') {
+            return "\\t";
         } else {
-            return "'" + c + "'";
+            return String.format("\\u%04x", (int) c);
         }
     }
 

Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/conversion/NameParserTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/conversion/NameParserTest.java?rev=1908783&r1=1908782&r2=1908783&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/conversion/NameParserTest.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/conversion/NameParserTest.java Wed Mar 29 16:29:54 2023
@@ -110,6 +110,9 @@ public class NameParserTest extends Test
         valid.add(new String[] {"abc { }", "", "abc { }"});
         valid.add(new String[] {"{ ab }", "", "{ ab }"});
         valid.add(new String[] {"{ }abc", "", "{ }abc"});
+        // see JCR-4917
+        valid.add(new String[] {"a\u200ab", "", "a\u200ab"});
+        valid.add(new String[] {"\u200ab\u200a", "", "\u200ab\u200a"});
         // unknown uri -> but valid non-prefixed jcr-name
         valid.add(new String[] {"{test}abc", "", "{test}abc"});
         valid.add(new String[] {"{ab}", "", "{ab}"});
@@ -243,7 +246,7 @@ public class NameParserTest extends Test
             NameParser.checkFormat("horizontal\ttab");
             fail("should fail with IllegalNameException");
         } catch (IllegalNameException ex) {
-            assertTrue("message should contain '\\u0009'", ex.getMessage().indexOf("'\\u0009'") >= 0);
+            assertTrue("message should contain '\\t'", ex.getMessage().indexOf("\\t") >= 0);
         }
     }