This is an automated email from the ASF dual-hosted git repository.

ramyav pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata4.git


The following commit(s) were added to refs/heads/master by this push:
     new dfe1dd2  [OLINGO-1417]OData V4: Adopt search option based on new V4 
abnf
dfe1dd2 is described below

commit dfe1dd288c4f706a91b59a620f30c0c60b2ce1d7
Author: ramya vasanth <ramya.vasa...@sap.com>
AuthorDate: Wed Dec 18 10:46:21 2019 +0530

    [OLINGO-1417]OData V4: Adopt search option based on new V4 abnf
---
 .../server/core/uri/parser/search/SearchTokenizer.java     | 11 ++++++++++-
 .../uri/parser/search/SearchParserAndTokenizerTest.java    |  2 +-
 .../server/core/uri/parser/search/SearchTokenizerTest.java | 14 +++++++++-----
 .../olingo/server/core/uri/parser/SearchParserTest.java    |  2 +-
 4 files changed, 21 insertions(+), 8 deletions(-)

diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
index 9c818fc..6a40e00 100644
--- 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
@@ -21,6 +21,7 @@ package org.apache.olingo.server.core.uri.parser.search;
 import java.util.ArrayList;
 import java.util.List;
 
+
 /**
  * <pre>
  * searchExpr    = ( OPEN BWS searchExpr BWS CLOSE / searchTerm )
@@ -121,7 +122,11 @@ public class SearchTokenizer {
     }
 
     static boolean isAllowedWord(final char character) {
-      return Character.isUnicodeIdentifierStart(character);
+      return Character.isUnicodeIdentifierStart(character)
+          || Character.DASH_PUNCTUATION == Character.getType(character)
+          || Character.DECIMAL_DIGIT_NUMBER == Character.getType(character) 
+          || (Character.OTHER_PUNCTUATION == Character.getType(character) && 
+          (character != ';' && character != '"'));
     }
     
     /**
@@ -614,6 +619,10 @@ public class SearchTokenizer {
    */
   public List<SearchQueryToken> tokenize(final String searchQuery) throws 
SearchTokenizerException {
 
+    if (searchQuery.contains("%28") || searchQuery.contains("%29") || 
searchQuery.contains("%22")) {
+      throw new SearchTokenizerException("Invalid Token in Query string '",
+          SearchTokenizerException.MessageKeys.NOT_EXPECTED_TOKEN, 
searchQuery);
+    }
     char[] chars = searchQuery.trim().toCharArray();
 
     State state = new SearchExpressionState();
diff --git 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchParserAndTokenizerTest.java
 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchParserAndTokenizerTest.java
index f19fc82..ce91a1b 100644
--- 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchParserAndTokenizerTest.java
+++ 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchParserAndTokenizerTest.java
@@ -29,6 +29,7 @@ public class SearchParserAndTokenizerTest {
 
   @Test
   public void basicParsing() throws Exception {
+    assertQuery("99").resultsIn("'99'");
     assertQuery("\"99\"").resultsIn("'99'");
     assertQuery("a").resultsIn("'a'");
     assertQuery("a AND b").resultsIn("{'a' AND 'b'}");
@@ -83,7 +84,6 @@ public class SearchParserAndTokenizerTest {
 
   @Test
   public void invalidSearchQuery() throws Exception {
-    
assertQuery("99").resultsIn(SearchParserException.MessageKeys.TOKENIZER_EXCEPTION);
     
assertQuery("NOT").resultsIn(SearchParserException.MessageKeys.INVALID_NOT_OPERAND);
     
assertQuery("AND").resultsInExpectedTerm(SearchQueryToken.Token.AND.name());
     assertQuery("OR").resultsInExpectedTerm(SearchQueryToken.Token.OR.name());
diff --git 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
index 23866e3..216323d 100644
--- 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
+++ 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
@@ -54,16 +54,20 @@ public class SearchTokenizerTest {
     assertQuery("AN").resultsIn(word("AN"));
     assertQuery("O").resultsIn(word("O"));
     assertQuery("notAw0rd").resultsIn(word("notAw0rd"));
+    assertQuery("1").resultsIn(word("1"));
+    assertQuery("-").resultsIn(word("-"));
+    assertQuery("1.23a").resultsIn(word("1.23a"));
+    assertQuery(",").resultsIn(word(","));
+    assertQuery("*").resultsIn(word("*"));
     assertQuery("not,").resultsIn(word("not,"));
     assertQuery("not.").resultsIn(word("not."));
     assertQuery("B-B").resultsIn(word("B-B"));
     assertQuery("Dž").resultsIn(word("Dž"));
     // invalid
-    
assertQuery("%2F").resultsIn(SearchTokenizerException.MessageKeys.FORBIDDEN_CHARACTER);
-    
assertQuery("%3A").resultsIn(SearchTokenizerException.MessageKeys.FORBIDDEN_CHARACTER);
-    
assertQuery("not%5B").resultsIn(SearchTokenizerException.MessageKeys.FORBIDDEN_CHARACTER);
-    
assertQuery("not%7B").resultsIn(SearchTokenizerException.MessageKeys.FORBIDDEN_CHARACTER);
-    
assertQuery("not%6A").resultsIn(SearchTokenizerException.MessageKeys.FORBIDDEN_CHARACTER);
+    
assertQuery(";").resultsIn(SearchTokenizerException.MessageKeys.FORBIDDEN_CHARACTER);
+    
assertQuery("%28").resultsIn(SearchTokenizerException.MessageKeys.NOT_EXPECTED_TOKEN);
+    
assertQuery("%29").resultsIn(SearchTokenizerException.MessageKeys.NOT_EXPECTED_TOKEN);
+    
assertQuery("not%22").resultsIn(SearchTokenizerException.MessageKeys.NOT_EXPECTED_TOKEN);
   }
 
   private Validator.Tuple word(final String literal) {
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/parser/SearchParserTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/parser/SearchParserTest.java
index 743439a..417daa4 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/parser/SearchParserTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/parser/SearchParserTest.java
@@ -89,7 +89,7 @@ public class SearchParserTest {
         
.isExceptionMessage(SearchParserException.MessageKeys.TOKENIZER_EXCEPTION);
     testUri.runEx("ESTwoKeyNav", "$search=%22a%5Cbc%22")
         
.isExceptionMessage(SearchParserException.MessageKeys.TOKENIZER_EXCEPTION);
-    testUri.runEx("ESTwoKeyNav", "$search=not%27allowed")
+    testUri.runEx("ESTwoKeyNav", "$search=not%28allowed")
         
.isExceptionMessage(SearchParserException.MessageKeys.TOKENIZER_EXCEPTION);
   }
 

Reply via email to