From e75924e9ec361b564233b335d76d832e5d592131 Mon Sep 17 00:00:00 2001 From: Fabien Bourigault Date: Thu, 8 Jan 2015 22:31:57 +0100 Subject: [PATCH] alpm: fix SIGSEV when asking for package files. --- backends/alpm/pk-alpm-packages.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/backends/alpm/pk-alpm-packages.c b/backends/alpm/pk-alpm-packages.c index 36e912010..2bc4ed558 100644 --- a/backends/alpm/pk-alpm-packages.c +++ b/backends/alpm/pk-alpm-packages.c @@ -287,15 +287,17 @@ pk_backend_get_files_thread (PkBackendJob *job, GVariant* params, gpointer p) PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend); gchar **packages; _cleanup_error_free_ GError *error = NULL; + const gchar *root; packages = (gchar**) p; + root = alpm_option_get_root (priv->alpm); for (; *packages != NULL; ++packages) { alpm_filelist_t *filelist; alpm_pkg_t *pkg; - const gchar *root; + gsize i; - _cleanup_strv_free_ GString *files = NULL; + _cleanup_strv_free_ gchar **files = NULL; if (pk_backend_job_is_cancelled (job)) break; @@ -304,17 +306,13 @@ pk_backend_get_files_thread (PkBackendJob *job, GVariant* params, gpointer p) if (pkg == NULL) break; - root = alpm_option_get_root (priv->alpm); - files = g_string_new (""); - filelist = alpm_pkg_get_files (pkg); + files = g_new0 (gchar*, filelist->count + 1); for (i = 0; i < filelist->count; ++i) { - const gchar *file = filelist->files[i].name; - g_string_append_printf (files, "%s%s;", root, file); + files[i] = g_strconcat (root, filelist->files[i].name, NULL); } - g_string_truncate (files, MAX (files->len, 1) - 1); - pk_backend_job_files (job, *packages, &files->str); + pk_backend_job_files (job, *packages, files); } pk_alpm_finish (job, error);