diff options
author | Phaedrus Leeds <mwleeds@protonmail.com> | 2021-05-02 17:00:18 -0500 |
---|---|---|
committer | Alexander Larsson <alexander.larsson@gmail.com> | 2021-05-04 10:23:13 +0200 |
commit | 1120c7cb2472ec991a837d3233fc0b5f88d3e404 (patch) | |
tree | 55ccb50c46ac2f7ef43c07ab35772a2ea4ed842c | |
parent | 879c9b90089d5a94b90e10792e9ab58004d3d321 (diff) | |
download | flatpak-1120c7cb2472ec991a837d3233fc0b5f88d3e404.tar.gz |
Fix memory errors w/ use of var_arrayofstring_to_strv()
-rw-r--r-- | app/flatpak-builtins-build-init.c | 2 | ||||
-rw-r--r-- | app/flatpak-builtins-repair.c | 2 | ||||
-rw-r--r-- | common/flatpak-dir.c | 18 |
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; |