Fix command parser: resizing tiling windows

i3 would accept an invalid resize command like 'resize shrink width 10
px or' without specifying the ppt value, and then crash. This patch
fixes the parser specification.
This commit is contained in:
jj 2013-10-09 22:30:41 +02:00 committed by Michael Stapelberg
parent 8fe17407ff
commit bf1699e967
2 changed files with 19 additions and 4 deletions

View File

@ -209,11 +209,11 @@ state RESIZE_TILING:
-> call cmd_resize($way, $direction, $resize_px, "10")
state RESIZE_TILING_OR:
'ppt'
->
resize_ppt = word
->
end
-> RESIZE_TILING_FINAL
state RESIZE_TILING_FINAL:
'ppt', end
-> call cmd_resize($way, $direction, $resize_px, $resize_ppt)
# rename workspace <name> to <name>

View File

@ -171,4 +171,19 @@ is(parser_calls('workspace "foo \"bar"'),
'cmd_workspace_name(foo "bar)',
'Command with escaped double quotes ok');
################################################################################
# 4: Verify that resize commands with a "px or ppt"-construction are parsed
# correctly
################################################################################
is(parser_calls("resize shrink width 10 px or"),
"ERROR: Expected one of these tokens: <word>\n" .
"ERROR: Your command: resize shrink width 10 px or\n" .
"ERROR: ",
"error for resize command with incomplete 'or'-construction ok");
is(parser_calls("resize grow left 10 px or 20 ppt"),
"cmd_resize(grow, left, 10, 20)",
"resize command with 'or'-construction ok");
done_testing;