From 6e9bbe67ce5f02ff6ac24889e5a215ee46247c32 Mon Sep 17 00:00:00 2001
From: Michael Stapelberg <michael@stapelberg.de>
Date: Wed, 27 Jun 2012 17:48:22 +0200
Subject: [PATCH] Bugfix: fix reload crashes in rare cases (Thanks Tucos)

Depending on the memory layout, it could happen that bind->command was
exchanged with something else while the parser still accessed it.

Therefore, we now copy the command and let the parser use that copy.
---
 src/handlers.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/handlers.c b/src/handlers.c
index 148d6337..cb76eb78 100644
--- a/src/handlers.c
+++ b/src/handlers.c
@@ -119,7 +119,9 @@ static void handle_key_press(xcb_key_press_event_t *event) {
         }
     }
 
-    struct CommandResult *command_output = parse_command(bind->command);
+    char *command_copy = sstrdup(bind->command);
+    struct CommandResult *command_output = parse_command(command_copy);
+    free(command_copy);
 
     if (command_output->needs_tree_render)
         tree_render();