[OLINGO-659] Lexer recognizes invalid charaters

This commit is contained in:
Christia Holzer 2015-09-15 12:57:31 +02:00
parent 9c3ca381e2
commit d84c3275cb
2 changed files with 46 additions and 21 deletions

View File

@ -25,7 +25,7 @@ lexer grammar UriLexer;
//;==============================================================================
QM : '?' -> pushMode(MODE_QUERY); //first query parameter
AMP : '&' -> pushMode(MODE_QUERY); //more query parameters
STRING : '\'' -> more, pushMode(MODE_STRING); //reads up to next single '
STRING : '\'' -> more, pushMode(MODE_STRING) ; //reads up to next single '
QUOTATION_MARK : '\u0022' -> more, pushMode(MODE_JSON_STRING); //reads up to next unescaped "
SEARCH_INLINE : '$search' -> pushMode(MODE_SYSTEM_QUERY_SEARCH); //
FRAGMENT : '#' -> pushMode(MODE_FRAGMENT); //
@ -324,6 +324,7 @@ FRAGMENT_sqr : '#' -> type(FRAGMENT), popMode;
EQ_sqr : '=' -> type(EQ);
REST : ~[&#=] ~[&#]*;
ERROR_CHARACTER_sqmr : .;
//;==============================================================================
mode MODE_SYSTEM_QUERY_SEARCH;
@ -346,6 +347,7 @@ SEARCHPHRASE : QUOTATION_MARK_sqc ~["]* QUOTATION_MARK_sqc;
CLOSE_qs : ')' -> popMode, type(CLOSE);
SEMI_qs : ';' -> popMode, type(SEMI);
AMP_qs : '&' -> popMode, type(AMP);
ERROR_CHARACTER_sqms : .;
//;==============================================================================
mode MODE_STRING;
@ -354,6 +356,7 @@ mode MODE_STRING;
//;==============================================================================
STRING_s : ('\'\'' | ~[\u0027] )* '\'' -> type(STRING), popMode;
ERROR_CHARACTER_sm : EOF | .;
//;==============================================================================
mode MODE_JSON_STRING;
@ -362,6 +365,7 @@ mode MODE_JSON_STRING;
//;==============================================================================
STRING_IN_JSON : ('\\"' | ~[\u0022] )* '"' -> popMode;
ERROR_CHARACTER_jsm : EOF | .;
//;==============================================================================
mode MODE_ODATA_GEO;
@ -412,3 +416,5 @@ POLYGON : P_ O_ L_ Y_ G_ O_ N_ ;
SRID : S_ R_ I_ D_;
SQUOTE : '\'' -> popMode;
ERROR_CHARACTER_g : .;

View File

@ -1013,6 +1013,25 @@ public class TestFullResourcePath {
.isExSemantic(UriParserSemanticException.MessageKeys.RESOURCE_NOT_FOUND);
}
@Test
public void runResourcePathWithApostrophe() {
// TODO Currently "'" is not allowed in OData identifiers, but the specification allows this character (Unicode Cf)
testUri.runEx("ESAllPrim'").isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESAllPrim'InvalidStuff").isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESAllPrim", "$filter=PropertyInt16' eq 0")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESAllPrim", "$filter=PropertyInt16 eq' 0")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESAllPrim", "$filter=PropertyInt16 eq 0'")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
testUri.runEx("ESAllPrim", "$filter=PropertyInt16 eq 'dsd''")
.isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);
}
@Test
public void runEsNameCast() throws Exception {
testUri.run("ESTwoPrim/olingo.odata.test1.ETBase")