Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 50598 invoked from network); 7 Jan 2007 22:07:14 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 7 Jan 2007 22:07:14 -0000 Received: (qmail 58403 invoked by uid 500); 7 Jan 2007 22:07:20 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 58369 invoked by uid 500); 7 Jan 2007 22:07:20 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 58358 invoked by uid 99); 7 Jan 2007 22:07:20 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 07 Jan 2007 14:07:20 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 07 Jan 2007 14:07:13 -0800 Received: by eris.apache.org (Postfix, from userid 65534) id 2412F1A981C; Sun, 7 Jan 2007 14:05:57 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r493860 - in /directory/trunks/shared/ldap/src: main/antlr/ main/java/org/apache/directory/shared/ldap/filter/ test/java/org/apache/directory/shared/ldap/aci/ test/java/org/apache/directory/shared/ldap/filter/ Date: Sun, 07 Jan 2007 22:05:56 -0000 To: commits@directory.apache.org From: seelmann@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070107220557.2412F1A981C@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: seelmann Date: Sun Jan 7 14:05:55 2007 New Revision: 493860 URL: http://svn.apache.org/viewvc?view=rev&rev=493860 Log: Fix for DIRSERVER-814: Improved filter detection in ACI lexer; Added check for balanced parenthesis into filter parser (parser hangs in an infinite loop) Modified: directory/trunks/shared/ldap/src/main/antlr/ACIItem.g directory/trunks/shared/ldap/src/main/antlr/ACIItemChecker.g directory/trunks/shared/ldap/src/main/antlr/SubtreeSpecificationChecker.g directory/trunks/shared/ldap/src/main/antlr/filter-lexer.g directory/trunks/shared/ldap/src/main/antlr/filter-value-lexer.g directory/trunks/shared/ldap/src/main/antlr/filter-value-parser.g directory/trunks/shared/ldap/src/main/antlr/subtree-specification.g directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/filter/FilterParserImpl.java directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/aci/ACIItemParserTest.java directory/trunks/shared/ldap/src/test/java/org/apache/directory/shared/ldap/filter/FilterParserImplTest.java Modified: directory/trunks/shared/ldap/src/main/antlr/ACIItem.g URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/antlr/ACIItem.g?view=diff&rev=493860&r1=493859&r2=493860 ============================================================================== --- directory/trunks/shared/ldap/src/main/antlr/ACIItem.g (original) +++ directory/trunks/shared/ldap/src/main/antlr/ACIItem.g Sun Jan 7 14:05:55 2007 @@ -1469,7 +1469,12 @@ "attributeValue"! ( SP! )+ '{'! ( options { greedy = false; } : . )* '}'! { $setType( ATTRIBUTE_VALUE_CANDIDATE ); } | ( "rangeOfValues" ( SP! )+ '(' ) => - "rangeOfValues"! ( SP! )+ '(' ( options { greedy = false; } : . )* ')' + "rangeOfValues"! ( SP! )+ FILTER { $setType( RANGE_OF_VALUES_CANDIDATE ); } | ALPHA ( ALPHA | DIGIT | HYPHEN )* ; + +protected FILTER : '(' ( ( '&' (SP)* (FILTER)+ ) | ( '|' (SP)* (FILTER)+ ) | ( '!' (SP)* FILTER ) | FILTER_VALUE ) ')' (SP)* ; + +protected FILTER_VALUE : (options{greedy=true;}: ~( ')' | '(' | '&' | '|' | '!' ) ( ~(')') )* ) ; + Modified: directory/trunks/shared/ldap/src/main/antlr/ACIItemChecker.g URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/antlr/ACIItemChecker.g?view=diff&rev=493860&r1=493859&r2=493860 ============================================================================== --- directory/trunks/shared/ldap/src/main/antlr/ACIItemChecker.g (original) +++ directory/trunks/shared/ldap/src/main/antlr/ACIItemChecker.g Sun Jan 7 14:05:55 2007 @@ -816,7 +816,13 @@ "attributeValue"! ( SP! )+ '{'! ( options { greedy = false; } : . )* '}'! { $setType( ATTRIBUTE_VALUE_CANDIDATE ); } | ( "rangeOfValues" ( SP! )+ '(' ) => - "rangeOfValues"! ( SP! )+ '(' ( options { greedy = false; } : . )* ')' + "rangeOfValues"! ( SP! )+ FILTER { $setType( RANGE_OF_VALUES_CANDIDATE ); } | ALPHA ( ALPHA | DIGIT | HYPHEN )* ; + +protected FILTER : '(' ( ( '&' (SP)* (FILTER)+ ) | ( '|' (SP)* (FILTER)+ ) | ( '!' (SP)* FILTER ) | FILTER_VALUE ) ')' (SP)* ; + +protected FILTER_VALUE : (options{greedy=true;}: ~( ')' | '(' | '&' | '|' | '!' ) ( ~(')') )* ) ; + + \ No newline at end of file Modified: directory/trunks/shared/ldap/src/main/antlr/SubtreeSpecificationChecker.g URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/antlr/SubtreeSpecificationChecker.g?view=diff&rev=493860&r1=493859&r2=493860 ============================================================================== --- directory/trunks/shared/ldap/src/main/antlr/SubtreeSpecificationChecker.g (original) +++ directory/trunks/shared/ldap/src/main/antlr/SubtreeSpecificationChecker.g Sun Jan 7 14:05:55 2007 @@ -459,6 +459,6 @@ '\u4e00'..'\u9fff' | '\uf900'..'\ufaff' ; -FILTER : '(' ( ( '&' (FILTER)+ ) | ( '|' (FILTER)+ ) | ( '!' FILTER ) | FILTER_VALUE ) ')' ; +FILTER : '(' ( ( '&' (SP)* (FILTER)+ ) | ( '|' (SP)* (FILTER)+ ) | ( '!' (SP)* FILTER ) | FILTER_VALUE ) ')' (SP)* ; protected FILTER_VALUE : (options{greedy=true;}: ~( ')' | '(' | '&' | '|' | '!' ) ( ~(')') )* ) ; Modified: directory/trunks/shared/ldap/src/main/antlr/filter-lexer.g URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/antlr/filter-lexer.g?view=diff&rev=493860&r1=493859&r2=493860 ============================================================================== --- directory/trunks/shared/ldap/src/main/antlr/filter-lexer.g (original) +++ directory/trunks/shared/ldap/src/main/antlr/filter-lexer.g Sun Jan 7 14:05:55 2007 @@ -49,6 +49,7 @@ charVocabulary='\u0001'..'\u0127'; exportVocab = FilterLexer; importVocab = FilterValueLexer; + defaultErrorHandler=false; } Modified: directory/trunks/shared/ldap/src/main/antlr/filter-value-lexer.g URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/antlr/filter-value-lexer.g?view=diff&rev=493860&r1=493859&r2=493860 ============================================================================== --- directory/trunks/shared/ldap/src/main/antlr/filter-value-lexer.g (original) +++ directory/trunks/shared/ldap/src/main/antlr/filter-value-lexer.g Sun Jan 7 14:05:55 2007 @@ -53,6 +53,7 @@ // allow any unicode characters charVocabulary='\u0000'..'\uFFFE'; exportVocab=FilterValueLexer; + defaultErrorHandler=false; } Modified: directory/trunks/shared/ldap/src/main/antlr/filter-value-parser.g URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/antlr/filter-value-parser.g?view=diff&rev=493860&r1=493859&r2=493860 ============================================================================== --- directory/trunks/shared/ldap/src/main/antlr/filter-value-parser.g (original) +++ directory/trunks/shared/ldap/src/main/antlr/filter-value-parser.g Sun Jan 7 14:05:55 2007 @@ -54,6 +54,7 @@ { k = 3; importVocab = FilterValueLexer; + defaultErrorHandler=false; } Modified: directory/trunks/shared/ldap/src/main/antlr/subtree-specification.g URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/antlr/subtree-specification.g?view=diff&rev=493860&r1=493859&r2=493860 ============================================================================== --- directory/trunks/shared/ldap/src/main/antlr/subtree-specification.g (original) +++ directory/trunks/shared/ldap/src/main/antlr/subtree-specification.g Sun Jan 7 14:05:55 2007 @@ -567,6 +567,6 @@ '\u4e00'..'\u9fff' | '\uf900'..'\ufaff' ; -FILTER : '(' ( ( '&' (FILTER)+ ) | ( '|' (FILTER)+ ) | ( '!' FILTER ) | FILTER_VALUE ) ')' ; +FILTER : '(' ( ( '&' (SP)* (FILTER)+ ) | ( '|' (SP)* (FILTER)+ ) | ( '!' (SP)* FILTER ) | FILTER_VALUE ) ')' (SP)* ; protected FILTER_VALUE : (options{greedy=true;}: ~( ')' | '(' | '&' | '|' | '!' ) ( ~(')') )* ) ; Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/filter/FilterParserImpl.java URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/filter/FilterParserImpl.java?view=diff&rev=493860&r1=493859&r2=493860 ============================================================================== --- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/filter/FilterParserImpl.java (original) +++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/filter/FilterParserImpl.java Sun Jan 7 14:05:55 2007 @@ -114,6 +114,24 @@ { filter = StringTools.trimConsecutiveToOne( filter, '*' ); } + + // check balanced parenthesis + int balanced = 0; + for(int i=0; i