summaryrefslogtreecommitdiffstats
path: root/src/Backtrace
diff options
context:
space:
mode:
authorKarel Klic <kklic@redhat.com>2009-11-24 18:04:07 +0100
committerKarel Klic <kklic@redhat.com>2009-11-24 18:04:07 +0100
commit074efbd72d70a7dbd7ca47d07d083ebb2e15e57f (patch)
treea4eae284bb8ac1e733e4b9bcc76963047781b86c /src/Backtrace
parent27bf86529b2b4b8d94d08dc55bf1d3d3c55c4fb1 (diff)
downloadabrt-074efbd72d70a7dbd7ca47d07d083ebb2e15e57f.tar.gz
abrt-074efbd72d70a7dbd7ca47d07d083ebb2e15e57f.tar.xz
abrt-074efbd72d70a7dbd7ca47d07d083ebb2e15e57f.zip
Add more corner cases to parser
Diffstat (limited to 'src/Backtrace')
-rw-r--r--src/Backtrace/parser.y25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/Backtrace/parser.y b/src/Backtrace/parser.y
index c81586e7..8512366a 100644
--- a/src/Backtrace/parser.y
+++ b/src/Backtrace/parser.y
@@ -46,6 +46,8 @@ void yyerror(char const *s)
}
/* Bison declarations. */
+%token END 0 "end of file"
+
%type <backtrace> backtrace ignoredpart_backtrace
%type <thread> threads thread
%type <frame> frames frame frame_head frame_head_1 frame_head_2 frame_head_3 frame_head_4 frame_head_5
@@ -214,10 +216,15 @@ file_location : file_name ':' digit_sequence
;
variables : variables_line '\n'
+ | variables_line END
| variables_line variables_wss '\n'
+ | variables_line variables_wss END
| variables variables_line '\n'
+ | variables variables_line END
| variables variables_wss variables_line '\n'
+ | variables variables_wss variables_line END
| variables variables_wss variables_line variables_wss '\n'
+ | variables variables_wss variables_line variables_wss END
;
variables_line : variables_char_no_framestart
@@ -261,13 +268,27 @@ function_args : '(' wsa ')'
this must be somehow handled, especially characters ( and ). */
function_args_sequence : function_args_char
| function_args_sequence wsa function_args_char
+ | function_args_sequence wsa function_args_string
+;
+
+function_args_string : '"' function_args_string_sequence '"'
;
-function_args_char : digit | nondigit | '{' | '}' | '<' | '>' | '"' | ':' | '~'
+function_args_char : digit | nondigit | '{' | '}' | '<' | '>' | ':' | '~'
| '=' | '-' | '+' | '@' | ',' | '.' | '[' | ']' | '/' | '%'
- | '\\'
+ | '\\' | '&'
+;
+
+function_args_string_sequence : function_args_string_char
+ | function_args_string_sequence function_args_string_char
+ | function_args_string_sequence '\t' function_args_string_char
+ | function_args_string_sequence ' ' function_args_string_char
+;
+
+function_args_string_char : function_args_char | '(' | ')'
;
+
file_name : file_name_char { $$ = strbuf_new(); strbuf_append_char($$, $1); }
| file_name file_name_char { $$ = strbuf_append_char($1, $2); }
;