Fix some leaks of floating GVariants

ostree_repo_pull_with_options() and ostree_repo_remote_change() don't
sink floating GVariant arguments, and doing so now would be an
ABI change; so don't rely on them to do so.

Leak found with valgrind memcheck.

Signed-off-by: Simon McVittie <smcv@debian.org>

Closes: #556
Approved by: cgwalters
This commit is contained in:
Simon McVittie 2016-10-29 18:47:11 +01:00 committed by Atomic Bot
parent 53f1fabfbe
commit 24af123c53
2 changed files with 8 additions and 2 deletions

View File

@ -208,6 +208,7 @@ ostree_builtin_pull (int argc, char **argv, GCancellable *cancellable, GError **
{ {
GVariantBuilder builder; GVariantBuilder builder;
g_autoptr(GVariant) options = NULL;
g_auto(GLnxConsoleRef) console = { 0, }; g_auto(GLnxConsoleRef) console = { 0, };
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
@ -265,7 +266,9 @@ ostree_builtin_pull (int argc, char **argv, GCancellable *cancellable, GError **
&console); &console);
} }
if (!ostree_repo_pull_with_options (repo, remote, g_variant_builder_end (&builder), options = g_variant_ref_sink (g_variant_builder_end (&builder));
if (!ostree_repo_pull_with_options (repo, remote, options,
progress, cancellable, error)) progress, cancellable, error))
goto out; goto out;

View File

@ -50,6 +50,7 @@ ot_remote_builtin_add (int argc, char **argv, GCancellable *cancellable, GError
const char *remote_url; const char *remote_url;
char **iter; char **iter;
g_autoptr(GVariantBuilder) optbuilder = NULL; g_autoptr(GVariantBuilder) optbuilder = NULL;
g_autoptr(GVariant) options = NULL;
gboolean ret = FALSE; gboolean ret = FALSE;
context = g_option_context_new ("NAME [metalink=|mirrorlist=]URL [BRANCH...] - Add a remote repository"); context = g_option_context_new ("NAME [metalink=|mirrorlist=]URL [BRANCH...] - Add a remote repository");
@ -109,11 +110,13 @@ ot_remote_builtin_add (int argc, char **argv, GCancellable *cancellable, GError
"gpg-verify", "gpg-verify",
g_variant_new_variant (g_variant_new_boolean (FALSE))); g_variant_new_variant (g_variant_new_boolean (FALSE)));
options = g_variant_ref_sink (g_variant_builder_end (optbuilder));
if (!ostree_repo_remote_change (repo, NULL, if (!ostree_repo_remote_change (repo, NULL,
opt_if_not_exists ? OSTREE_REPO_REMOTE_CHANGE_ADD_IF_NOT_EXISTS : opt_if_not_exists ? OSTREE_REPO_REMOTE_CHANGE_ADD_IF_NOT_EXISTS :
OSTREE_REPO_REMOTE_CHANGE_ADD, OSTREE_REPO_REMOTE_CHANGE_ADD,
remote_name, remote_url, remote_name, remote_url,
g_variant_builder_end (optbuilder), options,
cancellable, error)) cancellable, error))
goto out; goto out;