]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
systemctl: allocate arg_wall only on the heap
authorLennart Poettering <lennart@poettering.net>
Thu, 24 Sep 2015 10:30:05 +0000 (12:30 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 29 Sep 2015 19:55:52 +0000 (21:55 +0200)
Previously, we'd allocate it sometimes from the heap, but otherwise let
it point directly int argv[]. Let's clean this up, so that we know
exactly how to release its resources, and do so at the end.

src/systemctl/systemctl.c

index ecd4c01858fdf9a779d8b6134299c0f771e354a8..804f485403f749dbee4a7125a08dcac3b53af295 100644 (file)
@@ -6835,6 +6835,7 @@ static int shutdown_parse_argv(int argc, char *argv[]) {
                 {}
         };
 
+        char **wall = NULL;
         int c, r;
 
         assert(argc >= 0);
@@ -6908,10 +6909,16 @@ static int shutdown_parse_argv(int argc, char *argv[]) {
 
         if (argc > optind && arg_action == ACTION_CANCEL_SHUTDOWN)
                 /* No time argument for shutdown cancel */
-                arg_wall = argv + optind;
+                wall = argv + optind;
         else if (argc > optind + 1)
                 /* We skip the time argument */
-                arg_wall = argv + optind + 1;
+                wall = argv + optind + 1;
+
+        if (wall) {
+                arg_wall = strv_copy(wall);
+                if (!arg_wall)
+                        return log_oom();
+        }
 
         optind = argc;
 
@@ -7639,6 +7646,8 @@ finish:
         strv_free(arg_states);
         strv_free(arg_properties);
 
+        strv_free(arg_wall);
+
         sd_bus_default_flush_close();
 
         return r < 0 ? EXIT_FAILURE : r;