]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Also clear the command parser’s stack upon invalid commands (Thanks helgikrs)
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 21 Mar 2012 16:20:07 +0000 (17:20 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 21 Mar 2012 16:20:07 +0000 (17:20 +0100)
Fixes: #652
src/commands_parser.c
testcases/t/120-multiple-cmds.t

index f0459220fe3ef4c4a3115dbea62637dcaea2526a..27a782a2ccf8d8735a55e2d31e78831aec8d72fa 100644 (file)
@@ -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;
         }
     }
index 8cd17a8af43efea95dda5aa35e1d5846f58b6bc1..2d0ddcf440fd38bea138e7bf9533399a25c6f5cc 100644 (file)
@@ -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;