]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
key-file: ply_key_file_get_value returns duplicated memory, don't leak
authorRay Strode <rstrode@redhat.com>
Tue, 16 Oct 2018 01:13:58 +0000 (21:13 -0400)
committerRay Strode <rstrode@redhat.com>
Tue, 16 Oct 2018 01:13:58 +0000 (21:13 -0400)
For some reason I made the same api misdesign with ply_key_file_t
that I made when writing GKeyFile...it returns duplicated memory for
no good reason.

This commit sprinkles frees around.

src/main.c
src/plugins/splash/two-step/plugin.c

index 47157bc21c9f81fc10a4d3593fea9a44c5e48aeb..d0d9ce3b80690dcaf53302d93b9681de50357c06 100644 (file)
@@ -296,8 +296,8 @@ load_settings (state_t    *state,
 {
         ply_key_file_t *key_file = NULL;
         bool settings_loaded = false;
-        const char *scale_string;
-        const char *splash_string;
+        char *scale_string = NULL;
+        char *splash_string = NULL;
 
         ply_trace ("Trying to load %s", path);
         key_file = ply_key_file_new (path);
@@ -323,24 +323,27 @@ load_settings (state_t    *state,
         }
 
         if (isnan (state->splash_delay)) {
-                const char *delay_string;
+                char *delay_string;
 
                 delay_string = ply_key_file_get_value (key_file, "Daemon", "ShowDelay");
 
                 if (delay_string != NULL) {
                         state->splash_delay = atof (delay_string);
                         ply_trace ("Splash delay is set to %lf", state->splash_delay);
+                        free (delay_string);
                 }
         }
 
         if (isnan (state->device_timeout)) {
-                const char *timeout_string;
+                char *timeout_string;
 
                 timeout_string = ply_key_file_get_value (key_file, "Daemon", "DeviceTimeout");
 
                 if (timeout_string != NULL) {
                         state->device_timeout = atof (timeout_string);
                         ply_trace ("Device timeout is set to %lf", state->device_timeout);
+
+                        free (timeout_string);
                 }
         }
 
@@ -348,10 +351,12 @@ load_settings (state_t    *state,
 
         if (scale_string != NULL) {
                 ply_set_device_scale (strtoul (scale_string, NULL, 0));
+                free (scale_string);
         }
 
         settings_loaded = true;
 out:
+        free (splash_string);
         ply_key_file_free (key_file);
 
         return settings_loaded;
index 7ae991037b75db39d62ef378eb47b617eb6d67bb..7307e192f81ad5ac9b272a17d3550c8cb8d97569 100644 (file)
@@ -662,6 +662,8 @@ create_plugin (ply_key_file_t *key_file)
                         ply_trace ("unknown progress function %s, defaulting to linear", progress_function);
                         plugin->progress_function = PROGRESS_FUNCTION_TYPE_LINEAR;
                 }
+
+                free (progress_function);
         }
 
         plugin->views = ply_list_new ();