Repository: olingo-odata4 Updated Branches: refs/heads/master e5ac59079 -> 6f3565143
[OLINGO-568] Minor code clean up Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/6f356514 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/6f356514 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/6f356514 Branch: refs/heads/master Commit: 6f356514362be2f984c26f3cf2e603eac5b8b470 Parents: e5ac590 Author: Michael Bolz <[email protected]> Authored: Tue Dec 1 15:30:03 2015 +0100 Committer: Michael Bolz <[email protected]> Committed: Tue Dec 1 15:30:03 2015 +0100 ---------------------------------------------------------------------- .../core/uri/parser/search/SearchTokenizer.java | 56 ++------------------ .../uri/parser/search/SearchTokenizerTest.java | 2 + .../core/uri/antlr/TestFullResourcePath.java | 6 +++ 3 files changed, 13 insertions(+), 51 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6f356514/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java ---------------------------------------------------------------------- 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 2146438..546135d 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 @@ -123,14 +123,7 @@ public class SearchTokenizer { } static boolean isAllowedWord(final char character) { - // TODO mibo: add missing allowed characters - int type = Character.getType(character); - return (type == Character.LETTER_NUMBER - || type == Character.LOWERCASE_LETTER - || type == Character.MODIFIER_LETTER - || type == Character.OTHER_LETTER - || type == Character.TITLECASE_LETTER - || type == Character.UPPERCASE_LETTER); + return Character.isUnicodeIdentifierStart(character); } /** @@ -168,25 +161,17 @@ public class SearchTokenizer { * return <code>FALSE</code>.<br/> * <b>Furthermore</b> percent encoded characters are also not validated (and can not be validated on * a single character).<br/> - * Hence for the <code>%</code> character this method will return <code>FALSE</code>.<br/> + * Hence for the <code>%</code> character this method assumeS that it was percent encoded and is now decoded + * and will return <code>TRUE</code>.<br/> * * @param character which is checked * @return true if character is allowed for a phrase */ static boolean isAllowedPhrase(final char character) { - // FIXME mibo: check missing - return isQCharUnescaped(character);// || isEscaped(character); + // the '%' is allowed because it is assumed that it was percent encoded and is now decoded + return isQCharUnescaped(character) || character == '%'; } -// /** -// * escape = "\" / "%5C" ; reverse solidus U+005C -// * @param character which is checked -// * @return true if character is allowed -// */ -// private static boolean isEscaped(char character) { -// // TODO: mibo(151130): is checked in SearchPhraseState -// return false; -// } /** * qchar-unescaped = unreserved / pct-encoded-unescaped / other-delims / ":" / "@" / "/" / "?" / "$" / "'" / "=" @@ -195,7 +180,6 @@ public class SearchTokenizer { */ private static boolean isQCharUnescaped(char character) { return isUnreserved(character) -// || isPctEncodedUnescaped(character) || isOtherDelims(character) || character == ':' || character == '@' @@ -220,36 +204,6 @@ public class SearchTokenizer { || character == ';'; } -// /** -// * pct-encoded-unescaped = "%" ( "0" / "1" / "3" / "4" / "6" / "7" / "8" / "9" / A-to-F ) HEXDIG -// * / "%" "2" ( "0" / "1" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / A-to-F ) -// * / "%" "5" ( DIGIT / "A" / "B" / "D" / "E" / "F" ) -// * -// * HEXDIG = DIGIT / A-to-F -// * -// * @param character which is checked -// * @return true if character is allowed -// */ -// private static boolean isPctEncodedUnescaped(char character) { -// String hex = Integer.toHexString(character); -// char aschar[] = hex.toCharArray(); -// if(aschar[0] == '%') { -// if(aschar[1] == '2') { -// return aschar[2] != '2' && isHexDigit(aschar[2]); -// } else if(aschar[1] == '5') { -// return aschar[2] != 'C' && isHexDigit(aschar[2]); -// } else if(isHexDigit(aschar[1])) { -// return isHexDigit(aschar[2]); -// } -// } -// return false; -// } - -// private static boolean isHexDigit(char character) { -// return 'A' <= character && character <= 'F' // case A..F -// || '0' <= character && character <= '9'; // case 0..9 -// } - /** * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" * @param character which is checked http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6f356514/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java ---------------------------------------------------------------------- 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 46c9290..61cd28b 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 @@ -250,6 +250,8 @@ public class SearchTokenizerTest { @Test public void characterInPhrase() throws Exception { assertQuery("\"123\" OR \"ALPHA-._~\"").resultsIn(PHRASE, OR, PHRASE); + assertQuery("\"100%Olingo\"").resultsIn(new Validator.Tuple(PHRASE, "\"100%Olingo\"")); + assertQuery("\"100'Olingo\"").resultsIn(new Validator.Tuple(PHRASE, "\"100'Olingo\"")); //escaped characters assertQuery("\"\\\"123\" OR \"\\\\abc\"").resultsIn(new Validator.Tuple(PHRASE, "\"\"123\""), new Validator.Tuple(OR), new Validator.Tuple(PHRASE, "\"\\abc\"")); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6f356514/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java ---------------------------------------------------------------------- diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java index 3c02003..27fa2c1 100644 --- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java +++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java @@ -5462,6 +5462,10 @@ public class TestFullResourcePath { testUri.run("ESTwoKeyNav", "$search=abc AND (def OR ghi)"); testUri.run("ESTwoKeyNav", "$search=abc AND (def ghi)"); + // percent encoded characters + testUri.run("ESTwoKeyNav", "$search=%41%42%43"); + testUri.run("ESTwoKeyNav", "$search=\"100%25\""); + // escaped characters testUri.run("ESTwoKeyNav", "$search=\"abc\""); testUri.run("ESTwoKeyNav", "$search=\"a\\\"bc\""); @@ -5474,6 +5478,8 @@ public class TestFullResourcePath { .isExceptionMessage(SearchParserException.MessageKeys.TOKENIZER_EXCEPTION); testUri.runEx("ESTwoKeyNav", "$search=%22a%5Cbc%22") .isExceptionMessage(SearchParserException.MessageKeys.TOKENIZER_EXCEPTION); + testUri.runEx("ESTwoKeyNav", "$search=not%27allowed") + .isExceptionMessage(SearchParserException.MessageKeys.TOKENIZER_EXCEPTION); } @Test
