From: Michael Stapelberg Date: Wed, 21 Mar 2012 16:20:07 +0000 (+0100) Subject: Bugfix: Also clear the command parser’s stack upon invalid commands (Thanks helgikrs) X-Git-Tag: 4.2~50 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=2abfb5a88b24546eb481129fd8532b0aabb8e581;p=i3%2Fi3 Bugfix: Also clear the command parser’s stack upon invalid commands (Thanks helgikrs) Fixes: #652 --- diff --git a/src/commands_parser.c b/src/commands_parser.c index f0459220..27a782a2 100644 --- a/src/commands_parser.c +++ b/src/commands_parser.c @@ -91,7 +91,9 @@ static void push_string(const char *identifier, char *str) { /* When we arrive here, the stack is full. This should not happen and * means there’s either a bug in this parser or the specification * contains a command with more than 10 identified tokens. */ - printf("argh! stack full\n"); + fprintf(stderr, "BUG: commands_parser stack full. This means either a bug " + "in the code, or a new command which contains more than " + "10 identified tokens.\n"); exit(1); } @@ -392,6 +394,7 @@ struct CommandResult *parse_command(const char *input) { free(position); free(errormessage); + clear_stack(); break; } } diff --git a/testcases/t/120-multiple-cmds.t b/testcases/t/120-multiple-cmds.t index 8cd17a8a..2d0ddcf4 100644 --- a/testcases/t/120-multiple-cmds.t +++ b/testcases/t/120-multiple-cmds.t @@ -54,4 +54,13 @@ ok(($unused ~~ @{get_workspace_names()}), 'workspace exists after moving'); # TODO: need a non-invasive command before implementing a test which uses ',' +################################################################################ +# regression test: 10 invalid commands should not crash i3 (10 is the stack +# depth) +################################################################################ + +cmd 'move gibberish' for (0 .. 10); + +does_i3_live; + done_testing;