You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2010/01/19 23:38:46 UTC

svn commit: r900990 - /directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntaxCheckers/UuidSyntaxChecker.java

Author: elecharny
Date: Tue Jan 19 22:38:46 2010
New Revision: 900990

URL: http://svn.apache.org/viewvc?rev=900990&view=rev
Log:
Challenged by Seelmann, here is a faster version of the UUID SC :)

Modified:
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntaxCheckers/UuidSyntaxChecker.java

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntaxCheckers/UuidSyntaxChecker.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntaxCheckers/UuidSyntaxChecker.java?rev=900990&r1=900989&r2=900990&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntaxCheckers/UuidSyntaxChecker.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntaxCheckers/UuidSyntaxChecker.java Tue Jan 19 22:38:46 2010
@@ -21,6 +21,7 @@
 
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.schema.SyntaxChecker;
+import org.apache.directory.shared.ldap.util.StringTools;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,8 +42,12 @@
     /** The serialVersionUID */
     private static final long serialVersionUID = 1L;
 
-    private static final String UUID_REGEX = "^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$";
-    
+    // Tells if the byte is alphanumeric
+    private static boolean isHex( byte b )
+    {
+        return ( b > 0 ) && StringTools.ALPHA_DIGIT[b];
+    }
+
     /**
      * Creates a new instance of UUIDSyntaxChecker.
      */
@@ -69,15 +74,33 @@
             return false;
         }
 
-        String uuid = ( String ) value;
-        if ( ! uuid.matches( UUID_REGEX ) )
+        byte[] b = ((String)value).getBytes();
+        
+        if ( b.length < 36)
         {
-            LOG.debug( "Syntax invalid for '{}'", value );
             return false;
         }
         
-        // There is not that much more we can check.
-        LOG.debug( "Syntax valid for '{}'", value );
-        return true;
+        if ( 
+            isHex( b[0] ) && isHex( b[1] ) && isHex( b[2] ) && isHex( b[3] ) &
+            isHex( b[4] ) && isHex( b[5] ) && isHex( b[6] ) && isHex( b[7] ) &
+            b[8] == '-' &
+            isHex( b[9] ) && isHex( b[10] ) && isHex( b[11] ) && isHex( b[12] ) &
+            b[13] == '-' &
+            isHex( b[14] ) && isHex( b[15] ) && isHex( b[16] ) && isHex( b[17] ) &
+            b[18] == '-' &
+            isHex( b[19] ) && isHex( b[20] ) && isHex( b[21] ) && isHex( b[22] ) &
+            b[23] == '-' &
+            isHex( b[24] ) && isHex( b[25] ) && isHex( b[26] ) && isHex( b[27] ) &
+            isHex( b[28] ) && isHex( b[29] ) && isHex( b[30] ) && isHex( b[31] ) &
+            isHex( b[32] ) && isHex( b[33] ) && isHex( b[34] ) && isHex( b[35] ) )
+        {
+            // There is not that much more we can check.
+            LOG.debug( "Syntax valid for '{}'", value );
+            return true;
+        }
+
+        LOG.debug( "Syntax invalid for '{}'", value );
+        return false;
     }
 }