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 2016/05/28 08:06:23 UTC
svn commit: r1745848 - in
/directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter:
FilterParser.java SimpleNode.java SubstringNode.java
Author: elecharny
Date: Sat May 28 08:06:23 2016
New Revision: 1745848
URL: http://svn.apache.org/viewvc?rev=1745848&view=rev
Log:
o Fixed the Substring regexp generation, using the normalized form for the Inital, Any and Final assertionValues
o Fixed the value used in the SimpleNode getEscapedValue()
o Numerous fixes in the FilterParser
Modified:
directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/FilterParser.java
directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/SimpleNode.java
directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/SubstringNode.java
Modified: directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/FilterParser.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/FilterParser.java?rev=1745848&r1=1745847&r2=1745848&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/FilterParser.java (original)
+++ directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/FilterParser.java Sat May 28 08:06:23 2016
@@ -360,7 +360,7 @@ public final class FilterParser
b = Strings.byteAt( filterBytes, pos.start );
}
while ( b != '\0' );
-
+
if ( current != 0 )
{
if ( schemaManager != null )
@@ -378,10 +378,10 @@ public final class FilterParser
}
else
{
- byte[] bytes = new byte[value.length];
+ byte[] bytes = new byte[current];
System.arraycopy( value, 0, bytes, 0, current );
- return new Value( attributeType, Strings.utf8ToString( bytes ) );
+ return new Value( attributeType, bytes );
}
}
else
@@ -516,87 +516,89 @@ public final class FilterParser
private static ExprNode parseSubstring( SchemaManager schemaManager, String attribute, Value initial,
byte[] filterBytes, Position pos ) throws ParseException, LdapException
{
- if ( Strings.isCharASCII( filterBytes, pos.start, '*' ) )
+ SubstringNode node;
+
+ if ( schemaManager != null )
{
- // We have found a '*' : this is a substring
- SubstringNode node = null;
+ AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( attribute );
- if ( schemaManager != null )
+ if ( attributeType != null )
{
- AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( attribute );
-
- if ( attributeType != null )
- {
- node = new SubstringNode( schemaManager.lookupAttributeTypeRegistry( attribute ) );
- }
- else
- {
- return null;
- }
+ node = new SubstringNode( schemaManager.lookupAttributeTypeRegistry( attribute ) );
}
else
{
- node = new SubstringNode( attribute );
+ return null;
}
+ }
+ else
+ {
+ node = new SubstringNode( attribute );
+ }
- if ( ( initial != null ) && !initial.isNull() )
- {
- // We have a substring starting with a value : val*...
- // Set the initial value. It must be a String
- String initialStr = initial.getValue();
- node.setInitial( initialStr );
- }
+ if ( ( initial != null ) && !initial.isNull() )
+ {
+ // We have a substring starting with a value : val*...
+ // Set the initial value. It must be a String
+ String initialStr = initial.getValue();
+ node.setInitial( initialStr );
+ }
+
+ if ( Strings.isCharASCII( filterBytes, pos.start, ')' ) )
+ {
+ // No any or final, we are done
+ return node;
+ }
- pos.start++;
+ //
+ while ( true )
+ {
+ Value assertionValue = parseAssertionValue( schemaManager, attribute, filterBytes, pos );
+ // Is there anything else but a ')' after the value ?
if ( Strings.isCharASCII( filterBytes, pos.start, ')' ) )
{
- // No any or final, we are done
+ // Nope : as we have had [initial] '*' (any '*' ) *,
+ // this is the final
+ if ( !assertionValue.isNull() )
+ {
+ String finalStr = assertionValue.getValue();
+ node.setFinal( finalStr );
+ }
+
return node;
}
-
- //
- while ( true )
+ else if ( Strings.isCharASCII( filterBytes, pos.start, '*' ) )
{
- Value assertionValue = parseAssertionValue( schemaManager, attribute, filterBytes, pos );
-
- // Is there anything else but a ')' after the value ?
- if ( Strings.isCharASCII( filterBytes, pos.start, ')' ) )
+ // We have a '*' : it's an any
+ // If the value is empty, that means we have more than
+ // one consecutive '*' : do nothing in this case.
+ if ( !assertionValue.isNull() )
{
- // Nope : as we have had [initial] '*' (any '*' ) *,
- // this is the final
- if ( !assertionValue.isNull() )
- {
- String finalStr = assertionValue.getValue();
- node.setFinal( finalStr );
- }
-
- return node;
+ String anyStr = assertionValue.getValue();
+ node.addAny( anyStr );
}
- else if ( Strings.isCharASCII( filterBytes, pos.start, '*' ) )
- {
- // We have a '*' : it's an any
- // If the value is empty, that means we have more than
- // one consecutive '*' : do nothing in this case.
- if ( !assertionValue.isNull() )
- {
- String anyStr = assertionValue.getValue();
- node.addAny( anyStr );
- }
+ pos.start++;
+
+ // Skip any following '*'
+ while ( Strings.isCharASCII( filterBytes, pos.start, '*' ) )
+ {
pos.start++;
}
- else
+
+ // that may have been the closing '*'
+ if ( Strings.isCharASCII( filterBytes, pos.start, ')' ) )
{
- // This is an error
- throw new ParseException( I18n.err( I18n.ERR_04150 ), pos.start );
+ return node;
}
+
+ }
+ else
+ {
+ // This is an error
+ throw new ParseException( I18n.err( I18n.ERR_04150 ), pos.start );
}
- }
- else
- {
- // This is an error
- throw new ParseException( I18n.err( I18n.ERR_04150 ), pos.start );
}
}
@@ -628,79 +630,52 @@ public final class FilterParser
private static ExprNode parsePresenceEqOrSubstring( SchemaManager schemaManager, String attribute, byte[] filterBytes,
Position pos ) throws ParseException, LdapException
{
- if ( Strings.isCharASCII( filterBytes, pos.start, '*' ) )
- {
- // To be a present node, the next char should be a ')'
- pos.start++;
+ byte b = Strings.byteAt( filterBytes, pos.start );
- if ( Strings.isCharASCII( filterBytes, pos.start, ')' ) )
- {
- // This is a present node
- if ( schemaManager != null )
+ switch ( b )
+ {
+ case '*' :
+ // To be a present node, the next char should be a ')'
+ pos.start++;
+
+ if ( Strings.isCharASCII( filterBytes, pos.start, ')' ) )
{
- AttributeType attributeType = schemaManager.getAttributeType( attribute );
-
- if ( attributeType != null )
+ // This is a present node
+ if ( schemaManager != null )
{
- return new PresenceNode( attributeType );
+ AttributeType attributeType = schemaManager.getAttributeType( attribute );
+
+ if ( attributeType != null )
+ {
+ return new PresenceNode( attributeType );
+ }
+ else
+ {
+ return null;
+ }
}
else
{
- return null;
+ return new PresenceNode( attribute );
}
}
else
{
- return new PresenceNode( attribute );
+ // Definitively a substring with no initial or an error
+ return parseSubstring( schemaManager, attribute, null, filterBytes, pos );
}
- }
- else
- {
- // Definitively a substring with no initial or an error
- // Push back the '*' on the string
- pos.start--;
- return parseSubstring( schemaManager, attribute, null, filterBytes, pos );
- }
- }
- else if ( Strings.isCharASCII( filterBytes, pos.start, ')' ) )
- {
- // An empty equality Node
- if ( schemaManager != null )
- {
- AttributeType attributeType = schemaManager.getAttributeType( attribute );
-
- if ( attributeType != null )
- {
- return new EqualityNode( attributeType, new Value( ( byte[] ) null ) );
- }
-
- else
- {
- return null;
- }
- }
- else
- {
- return new EqualityNode( attribute, ( byte[] ) null );
- }
- }
- else
- {
- // A substring or an equality node
- Value value = parseAssertionValue( schemaManager, attribute, filterBytes, pos );
-
- // Is there anything else but a ')' after the value ?
- if ( Strings.isCharASCII( filterBytes, pos.start, ')' ) )
- {
- // This is an equality node
+
+ case ')' :
+ // An empty equality Node
if ( schemaManager != null )
{
AttributeType attributeType = schemaManager.getAttributeType( attribute );
-
+
if ( attributeType != null )
{
- return new EqualityNode( attributeType, value );
+ return new EqualityNode( attributeType, new Value( ( byte[] ) null ) );
}
+
else
{
return null;
@@ -708,11 +683,48 @@ public final class FilterParser
}
else
{
- return new EqualityNode( attribute, value.getValue() );
+ return new EqualityNode( attribute, ( byte[] ) null );
}
- }
+
+ default :
+ // A substring or an equality node
+ Value value = parseAssertionValue( schemaManager, attribute, filterBytes, pos );
+
+ // Is there anything else but a ')' after the value ?
+ b = Strings.byteAt( filterBytes, pos.start );
- return parseSubstring( schemaManager, attribute, value, filterBytes, pos );
+ switch ( b )
+ {
+ case ')' :
+ // This is an equality node
+ if ( schemaManager != null )
+ {
+ AttributeType attributeType = schemaManager.getAttributeType( attribute );
+
+ if ( attributeType != null )
+ {
+ return new EqualityNode( attributeType, value );
+ }
+ else
+ {
+ return null;
+ }
+ }
+ else
+ {
+ return new EqualityNode( attribute, value.getValue() );
+ }
+
+ case '*' :
+ pos.start++;
+
+ return parseSubstring( schemaManager, attribute, value, filterBytes, pos );
+
+
+ default :
+ // This is an error
+ throw new ParseException( I18n.err( I18n.ERR_04150 ), pos.start );
+ }
}
}
@@ -735,7 +747,7 @@ public final class FilterParser
private static ExprNode parseItem( SchemaManager schemaManager, byte[] filterBytes, Position pos, byte b,
boolean relaxed ) throws ParseException, LdapException
{
- String attribute = null;
+ String attribute;
if ( b == '\0' )
{
Modified: directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/SimpleNode.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/SimpleNode.java?rev=1745848&r1=1745847&r2=1745848&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/SimpleNode.java (original)
+++ directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/SimpleNode.java Sat May 28 08:06:23 2016
@@ -194,7 +194,7 @@ public abstract class SimpleNode<T> exte
{
if ( value != null )
{
- return escapeFilterValue( value.getAttributeType(), bytes );
+ return escapeFilterValue( value.getAttributeType(), value.getBytes() );
}
else
{
Modified: directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/SubstringNode.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/SubstringNode.java?rev=1745848&r1=1745847&r2=1745848&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/SubstringNode.java (original)
+++ directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/filter/SubstringNode.java Sat May 28 08:06:23 2016
@@ -303,13 +303,13 @@ public class SubstringNode extends LeafN
*/
public final Pattern getRegex( Normalizer normalizer ) throws LdapException
{
- if ( ( anyPattern != null ) && ( anyPattern.size() > 0 ) )
+ if ( ( anyPattern != null ) && ( !anyPattern.isEmpty() ) )
{
String[] any = new String[anyPattern.size()];
for ( int i = 0; i < any.length; i++ )
{
- any[i] = ( String ) normalizer.normalize( anyPattern.get( i ), PrepareString.AssertionType.SUBSTRING_ANY );
+ any[i] = normalizer.normalize( anyPattern.get( i ), PrepareString.AssertionType.SUBSTRING_ANY );
if ( any[i].length() == 0 )
{
@@ -321,7 +321,7 @@ public class SubstringNode extends LeafN
if ( initialPattern != null )
{
- initialStr = ( String ) normalizer.normalize( initialPattern, PrepareString.AssertionType.SUBSTRING_INITIAL );
+ initialStr = normalizer.normalize( initialPattern, PrepareString.AssertionType.SUBSTRING_INITIAL );
}
String finalStr = null;