Author: reschke
Date: Fri Jan 26 11:59:51 2018
New Revision: 1822279
URL: http://svn.apache.org/viewvc?rev=1822279&view=rev
Log:
OAK-7208: various disallowed control characters are accepted in node names
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/Namespaces.java
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/Namespaces.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/Namespaces.java?rev=1822279&r1=1822278&r2=1822279&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/Namespaces.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/Namespaces.java
Fri Jan 26 11:59:51 2018
@@ -66,6 +66,14 @@ public class Namespaces implements Names
*/
private static final boolean allowOtherWhitespaceChars =
Boolean.getBoolean("oak.allowOtherWhitespaceChars");
+ /**
+ * By default node names with control characters are not allowed.
+ * Oak releases prior to 1.10 allowed these (in conflict with the JCR
+ * specification), so if required the check can be turned off.
+ * See OAK-7208.
+ */
+ private static final boolean allowOtherControlChars =
Boolean.getBoolean("oak.allowOtherControlChars");
+
private Namespaces() {
}
@@ -261,8 +269,11 @@ public class Namespaces implements Names
} else if (ch != ' ') {
return false; // only spaces are allowed as whitespace
}
- } else if ("/:[]|*".indexOf(ch) != -1) { // TODO: XMLChar check
+ } else if ("/:[]|*".indexOf(ch) != -1) { // TODO: XMLChar check
for unpaired surrogates
return false; // invalid name character
+ } else if (!allowOtherControlChars && ch >= 0 && ch < 32 && (ch !=
9 && ch != 0xa && ch != 0xd)) {
+ // https://www.w3.org/TR/xml/#NT-Char - disallowed control
chars
+ return false;
}
}
Modified:
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java?rev=1822279&r1=1822278&r2=1822279&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java
Fri Jan 26 11:59:51 2018
@@ -275,6 +275,16 @@ public class ValidNamesTest extends Abst
}
@Test
+ public void testEnclosedNonXMLChars() {
+ // see https://www.w3.org/TR/xml/#NT-Char
+ for (int c = 0; c < 32; c++) {
+ if (!(c == 0x9 || c == 0xa || c == 0xd)) {
+ unsupportedNameTest("foo" + ((char) c) + "bar",
RepositoryException.class);
+ }
+ }
+ }
+
+ @Test
public void testEnclosedNonBreakingSpace() {
nameTest("foo\u00a0bar");
}