Fix crash on reload

If sway is reloaded using a bindsym which has multiple commands, it
failed to detect the reload command, didn't create a duplicate of the
binding and would crash because the reload command frees the bindings.

For example:

    mode system {
        bindsym r reload, mode default
    }

In this example, the binding->command is "reload, mode default".

Fixes #2545
This commit is contained in:
Ryan Dwyer 2018-09-01 11:13:48 +10:00
parent 1f1b1b34d6
commit ebe65a4d48

View file

@ -310,7 +310,7 @@ void seat_execute_command(struct sway_seat *seat, struct sway_binding *binding)
bool reload = false; bool reload = false;
// if this is a reload command we need to make a duplicate of the // if this is a reload command we need to make a duplicate of the
// binding since it will be gone after the reload has completed. // binding since it will be gone after the reload has completed.
if (strcasecmp(binding->command, "reload") == 0) { if (strncasecmp(binding->command, "reload", 6) == 0) {
reload = true; reload = true;
binding_copy = sway_binding_dup(binding); binding_copy = sway_binding_dup(binding);
if (!binding_copy) { if (!binding_copy) {