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