From a6f07f621d04492fed38f83f70fbcb63fca20f9f Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Tue, 10 Jan 2017 19:38:39 -0300 Subject: [PATCH] Makes the lexical errors a little bit more verbose --- src/parser/seclang-scanner.ll | 21 ++++++++++++++++--- test/test-cases/regression/action-id.json | 6 +++--- test/test-cases/regression/action-skip.json | 2 +- .../regression/config-include-bad.json | 2 +- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/parser/seclang-scanner.ll b/src/parser/seclang-scanner.ll index 4bdd09e3..07e6d952 100755 --- a/src/parser/seclang-scanner.ll +++ b/src/parser/seclang-scanner.ll @@ -255,7 +255,19 @@ VAR_FREE_TEXT_SPACE_COMMA [^, \t\"]+ NEW_LINE [\n\r]+ -%x TRANSACTION_TO_VARIABLE EXPECTING_VARIABLE TRANSACTION_FROM_VARIABLE_TO_OPERATOR EXPECTING_OPERATOR COMMENT EXPECTING_PARAMETER EXPECTING_ACTIONS TRANSACTION_FROM_OPERATOR_TO_ACTIONS TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS NO_OP_INFORMED FINISH_ACTIONS +%x TRANSACTION_TO_VARIABLE +%x EXPECTING_VARIABLE +%x TRANSACTION_FROM_VARIABLE_TO_OPERATOR +%x EXPECTING_OPERATOR +%x COMMENT +%x EXPECTING_PARAMETER +%x EXPECTING_ACTIONS +%x TRANSACTION_FROM_OPERATOR_TO_ACTIONS +%x TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS +%x NO_OP_INFORMED +%x FINISH_ACTIONS +%x LEXING_ERROR +%x LEXING_ERROR_ACTION %{ // Code run each time a pattern is matched. @@ -386,9 +398,10 @@ NEW_LINE [\n\r]+ \"[ \t]*\n { BEGIN(INITIAL); yyless(1); } \"[ \t]*\r\n { BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } -. { driver.error (*driver.loc.back(), "invalid character", yytext); throw p::syntax_error(*driver.loc.back(), ""); } +. { BEGIN(LEXING_ERROR_ACTION); yyless(0); } } + { <> { BEGIN(INITIAL); yyless(0); p::make_NEW_LINE(*driver.loc.back()); } . { BEGIN(INITIAL); } @@ -603,8 +616,10 @@ NEW_LINE [\n\r]+ -. { driver.error (*driver.loc.back(), "invalid character", yytext); throw p::syntax_error(*driver.loc.back(), ""); } +. { BEGIN(LEXING_ERROR); yyless(0); } +.+ { driver.error (*driver.loc.back(), "Invalid input: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } +.+ { driver.error (*driver.loc.back(), "Invalid action: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } <> { diff --git a/test/test-cases/regression/action-id.json b/test/test-cases/regression/action-id.json index 82ce5128..bfd1d56c 100644 --- a/test/test-cases/regression/action-id.json +++ b/test/test-cases/regression/action-id.json @@ -80,7 +80,7 @@ ] }, "expected":{ - "parser_error": "File: action-id.json. Line: 2. Column: 30. invalid character i" + "parser_error": "File: action-id.json. Line: 2. Column: 56. Invalid action: id:-1,phase:2,pass,t:trim\"" }, "rules":[ "SecRuleEngine On", @@ -212,7 +212,7 @@ ] }, "expected":{ - "parser_error": "action-id.json. Line: 2. Column: 30. invalid character i" + "parser_error": "action-id.json. Line: 2. Column: 56. Invalid action: id:'1,phase:2,pass,t:trim\"" }, "rules":[ "SecRuleEngine On", @@ -256,7 +256,7 @@ ] }, "expected":{ - "parser_error": "action-id.json. Line: 2. Column: 34. invalid character '" + "parser_error": "action-id.json. Line: 2. Column: 56. Invalid action: ',phase:2,pass,t:trim\"" }, "rules":[ "SecRuleEngine On", diff --git a/test/test-cases/regression/action-skip.json b/test/test-cases/regression/action-skip.json index affa8af4..f2f18958 100644 --- a/test/test-cases/regression/action-skip.json +++ b/test/test-cases/regression/action-skip.json @@ -38,7 +38,7 @@ "version_min":300000, "title":"Testing skip action 2/3", "expected":{ - "parser_error": "Rules error. File: action-skip.json. Line: 2. Column: 62. invalid character s" + "parser_error": "Rules error. File: action-skip.json. Line: 2. Column: 71. Invalid action: skip:abc" }, "client":{ "ip":"200.249.12.31", diff --git a/test/test-cases/regression/config-include-bad.json b/test/test-cases/regression/config-include-bad.json index 2584e54b..523759f1 100644 --- a/test/test-cases/regression/config-include-bad.json +++ b/test/test-cases/regression/config-include-bad.json @@ -4,7 +4,7 @@ "version_min":300000, "title":"Include - bad rule", "expected":{ - "parser_error": "Rules error. File: test-cases/data/config_example3.txt. Line: 2. Column: 41. invalid character o" + "parser_error": "Rules error. File: test-cases/data/config_example3.txt. Line: 2. Column: 66. Invalid action: ops \"id:1000,pass,t:trim\"" }, "rules":[ "SecRuleEngine On",