]> git.sur5r.net Git - i3/i3/commitdiff
cfg_workspace: memleak on duplicate workspace assignment
authorOrestis Floros <orestisf1993@gmail.com>
Sun, 25 Mar 2018 17:23:46 +0000 (20:23 +0300)
committerOrestis Floros <orestisf1993@gmail.com>
Sun, 25 Mar 2018 17:27:07 +0000 (20:27 +0300)
assignment->output is set but lost since TAILQ_INSERT_TAIL is never
called when duplicate is set.
This essentially happens on every reload.

src/config_directives.c

index da1fb580514278c324f82513f7aa524577d54d5a..491c840afbf71db3b52518f7a5b2eb1962e7c272 100644 (file)
@@ -328,21 +328,18 @@ CFGFUN(workspace, const char *workspace, const char *output) {
      * don’t have assignments of a single workspace to different
      * outputs */
     struct Workspace_Assignment *assignment;
-    bool duplicate = false;
     TAILQ_FOREACH(assignment, &ws_assignments, ws_assignments) {
         if (strcasecmp(assignment->name, workspace) == 0) {
             ELOG("You have a duplicate workspace assignment for workspace \"%s\"\n",
                  workspace);
-            assignment->output = sstrdup(output);
-            duplicate = true;
+            return;
         }
     }
-    if (!duplicate) {
-        assignment = scalloc(1, sizeof(struct Workspace_Assignment));
-        assignment->name = sstrdup(workspace);
-        assignment->output = sstrdup(output);
-        TAILQ_INSERT_TAIL(&ws_assignments, assignment, ws_assignments);
-    }
+
+    assignment = scalloc(1, sizeof(struct Workspace_Assignment));
+    assignment->name = sstrdup(workspace);
+    assignment->output = sstrdup(output);
+    TAILQ_INSERT_TAIL(&ws_assignments, assignment, ws_assignments);
 }
 
 CFGFUN(ipc_socket, const char *path) {