mirror of
https://github.com/ostreedev/ostree.git
synced 2025-01-11 09:18:20 +03:00
sysroot: Avoid bad double-free
If a deployment is somehow in the list twice, the hash table will free the *new* value with g_hash_table_insert which gets all broken. Just use g_hash_table_replace().
This commit is contained in:
parent
2b2c6ead22
commit
1641ade728
@ -304,7 +304,7 @@ cleanup_old_deployments (OstreeSysroot *self,
|
||||
cancellable, error))
|
||||
goto out;
|
||||
|
||||
active_deployment_dirs = g_hash_table_new_full (g_file_hash, (GEqualFunc)g_file_equal, NULL, g_object_unref);
|
||||
active_deployment_dirs = g_hash_table_new_full (g_file_hash, (GEqualFunc)g_file_equal, g_object_unref, NULL);
|
||||
active_boot_checksums = g_hash_table_new_full (g_str_hash, (GEqualFunc)g_str_equal, g_free, NULL);
|
||||
|
||||
for (i = 0; i < self->deployments->len; i++)
|
||||
@ -313,8 +313,8 @@ cleanup_old_deployments (OstreeSysroot *self,
|
||||
GFile *deployment_path = ostree_sysroot_get_deployment_directory (self, deployment);
|
||||
char *bootcsum = g_strdup (ostree_deployment_get_bootcsum (deployment));
|
||||
/* Transfer ownership */
|
||||
g_hash_table_insert (active_deployment_dirs, deployment_path, deployment_path);
|
||||
g_hash_table_insert (active_boot_checksums, bootcsum, bootcsum);
|
||||
g_hash_table_replace (active_deployment_dirs, deployment_path, deployment_path);
|
||||
g_hash_table_replace (active_boot_checksums, bootcsum, bootcsum);
|
||||
}
|
||||
|
||||
if (!list_all_deployment_directories (self, &all_deployment_dirs,
|
||||
|
Loading…
Reference in New Issue
Block a user