Fix a use-after-free error in switch binding

master
Di Ma 5 years ago committed by Brian Ashworth
parent c1c2fe04bb
commit 2bece94b9b

@ -608,6 +608,7 @@ void seat_execute_command(struct sway_seat *seat, struct sway_binding *binding)
return; return;
} }
memcpy(deferred, binding, sizeof(struct sway_binding)); memcpy(deferred, binding, sizeof(struct sway_binding));
deferred->command = strdup(binding->command);
list_add(seat->deferred_bindings, deferred); list_add(seat->deferred_bindings, deferred);
return; return;
} }

@ -1,4 +1,3 @@
#define _POSIX_C_SOURCE 200809L
#include "sway/config.h" #include "sway/config.h"
#include "sway/desktop/transaction.h" #include "sway/desktop/transaction.h"
#include "sway/input/switch.h" #include "sway/input/switch.h"
@ -57,7 +56,7 @@ static void execute_binding(struct sway_switch *sway_switch) {
calloc(1, sizeof(struct sway_binding)); calloc(1, sizeof(struct sway_binding));
dummy_binding->type = BINDING_SWITCH; dummy_binding->type = BINDING_SWITCH;
dummy_binding->flags = matched_binding->flags; dummy_binding->flags = matched_binding->flags;
dummy_binding->command = strdup(matched_binding->command); dummy_binding->command = matched_binding->command;
seat_execute_command(seat, dummy_binding); seat_execute_command(seat, dummy_binding);
free(dummy_binding); free(dummy_binding);

Loading…
Cancel
Save