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


Reply via email to