summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhaedrus Leeds <mwleeds@protonmail.com>2021-05-02 17:00:18 -0500
committerAlexander Larsson <alexander.larsson@gmail.com>2021-05-04 10:23:13 +0200
commit1120c7cb2472ec991a837d3233fc0b5f88d3e404 (patch)
tree55ccb50c46ac2f7ef43c07ab35772a2ea4ed842c
parent879c9b90089d5a94b90e10792e9ab58004d3d321 (diff)
downloadflatpak-1120c7cb2472ec991a837d3233fc0b5f88d3e404.tar.gz
Fix memory errors w/ use of var_arrayofstring_to_strv()
-rw-r--r--app/flatpak-builtins-build-init.c2
-rw-r--r--app/flatpak-builtins-repair.c2
-rw-r--r--common/flatpak-dir.c18
3 files changed, 15 insertions, 7 deletions
diff --git a/app/flatpak-builtins-build-init.c b/app/flatpak-builtins-build-init.c
index 950fd2e9..c0f2acf4 100644
--- a/app/flatpak-builtins-build-init.c
+++ b/app/flatpak-builtins-build-init.c
@@ -100,7 +100,7 @@ ensure_extensions (FlatpakDeploy *src_deploy, const char *default_branch,
g_autoptr(FlatpakDir) src_dir = NULL;
g_autoptr(GFile) deploy = NULL;
g_autoptr(GBytes) deploy_data = NULL;
- const char **subpaths;
+ g_autofree const char **subpaths = NULL;
deploy = flatpak_find_deploy_dir_for_ref (ext->ref, &src_dir, cancellable, error);
if (deploy == NULL)
diff --git a/app/flatpak-builtins-repair.c b/app/flatpak-builtins-repair.c
index 14ec70c0..61afbd4a 100644
--- a/app/flatpak-builtins-repair.c
+++ b/app/flatpak-builtins-repair.c
@@ -256,7 +256,7 @@ transaction_add_local_ref (FlatpakDir *dir,
g_autoptr(GError) local_error = NULL;
g_autofree char *repo_checksum = NULL;
const char *origin;
- const char **subpaths;
+ g_autofree const char **subpaths = NULL;
deploy_data = flatpak_dir_get_deploy_data (dir, ref, FLATPAK_DEPLOY_VERSION_ANY, NULL, &local_error);
if (deploy_data == NULL)
diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c
index 6f2b55c4..9fc8920c 100644
--- a/common/flatpak-dir.c
+++ b/common/flatpak-dir.c
@@ -3099,6 +3099,11 @@ flatpak_deploy_data_get_eol_rebase (GBytes *deploy_data)
return flatpak_deploy_data_get_string (deploy_data, "eolr");
}
+/*<private>
+ * flatpak_deploy_data_get_previous_ids:
+ *
+ * Returns: (array length=length zero-terminated=1) (transfer container): an array of constant strings
+ **/
const char **
flatpak_deploy_data_get_previous_ids (GBytes *deploy_data, gsize *length)
{
@@ -8645,7 +8650,8 @@ flatpak_dir_deploy_update (FlatpakDir *self,
g_autofree char *old_active = NULL;
const char *old_origin;
g_autofree char *commit = NULL;
- g_auto(GStrv) previous_ids = NULL;
+ g_autofree const char **previous_ids = NULL;
+ g_auto(GStrv) previous_ids_owned = NULL;
if (!flatpak_dir_lock (self, &lock,
cancellable, error))
@@ -8662,19 +8668,21 @@ flatpak_dir_deploy_update (FlatpakDir *self,
old_origin = flatpak_deploy_data_get_origin (old_deploy_data);
old_subpaths = flatpak_deploy_data_get_subpaths (old_deploy_data);
- previous_ids = g_strdupv ((char **) flatpak_deploy_data_get_previous_ids (old_deploy_data, NULL));
+ previous_ids = flatpak_deploy_data_get_previous_ids (old_deploy_data, NULL);
if (opt_previous_ids)
{
- g_auto(GStrv) old_previous_ids = previous_ids;
- previous_ids = flatpak_strv_merge (old_previous_ids, (char **) opt_previous_ids);
+ previous_ids_owned = flatpak_strv_merge ((char **) previous_ids, (char **) opt_previous_ids);
+ g_clear_pointer (&previous_ids, g_free);
}
+ else
+ previous_ids_owned = g_strdupv ((char **) previous_ids);
if (!flatpak_dir_deploy (self,
old_origin,
ref,
checksum_or_latest,
opt_subpaths ? opt_subpaths : old_subpaths,
- (const char * const *) previous_ids,
+ (const char * const *) previous_ids_owned,
cancellable, error))
return FALSE;