Просмотр исходного кода

config: Fix memory leak

totem_volatile_config_set_string_value was not properly freeing memory.

Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
Reviewed-by: Jan Friesse <jfriesse@redhat.com>
Christine Caulfield 8 лет назад
Родитель
Сommit
396bca4739
1 измененных файлов с 7 добавлено и 2 удалено
  1. 7 2
      exec/totemconfig.c

+ 7 - 2
exec/totemconfig.c

@@ -199,13 +199,18 @@ static void totem_volatile_config_set_string_value (struct totem_config *totem_c
 	const char *key_name, const char *deleted_key, const char *default_value)
 {
 	char runtime_key_name[ICMAP_KEYNAME_MAXLEN];
-	const void **config_value;
+	void **config_value;
+	void *old_config_ptr;
 
 	config_value = totem_get_param_by_name(totem_config, key_name);
+	old_config_ptr = *config_value;
 	if (icmap_get_string(key_name, totem_get_param_by_name(totem_config, key_name)) != CS_OK ||
 	    (deleted_key != NULL && strcmp(deleted_key, key_name) == 0)) {
-		*config_value = default_value;
+
+		/* Need to strdup() here so that the free() below works for a default and a configured value */
+		*config_value = strdup(default_value);
 	}
+	free(old_config_ptr);
 
 	/*
 	 * Store totem_config value to cmap runtime section