From 2b5bf78fafdf027624ca88e1f703bc9e577f4690 Mon Sep 17 00:00:00 2001 From: Matt Coffin Date: Tue, 11 Jun 2019 12:10:17 -0600 Subject: Fix segfaults caused by faulty command parsing This patch fixes faulty command parsing introduced by f0f5de9a9e87ca1f0d74e7cbf82ffceba51ffbe6. When that commit allowed criteria reset on ';' delimeters in commands lists, it failed to account for its inner ','-parsing loop eating threw the entire rest of the string. This patch refactors argsep to use a list of multiple separators, and (optionally) return the separator that it matched against in this iteration via a pointer. This allows it to hint at the command parser which separator was used at the end of the last command, allowing it to trigger a potential secondary read of the criteria. Fixes #4239 --- sway/tree/workspace.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'sway/tree') diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c index 1a1f5c49..e1ef40f4 100644 --- a/sway/tree/workspace.c +++ b/sway/tree/workspace.c @@ -212,9 +212,9 @@ static void workspace_name_from_binding(const struct sway_binding * binding, char *name = NULL; // workspace n - char *cmd = argsep(&cmdlist, " "); + char *cmd = argsep(&cmdlist, " ", NULL); if (cmdlist) { - name = argsep(&cmdlist, ",;"); + name = argsep(&cmdlist, ",;", NULL); } // TODO: support "move container to workspace" bindings as well -- cgit v1.2.3