summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2016-11-28 22:01:33 -0500
committerAtomic Bot <atomic-devel@projectatomic.io>2016-11-30 18:51:26 +0000
commitd83d5b4a29924f208c6955a0917a152d07e4b4d6 (patch)
tree774fed3f5d1b902f1ac786d38bb43165738e5dad
parent1bb6e514863d2faaa387d4609398c6043504d44b (diff)
downloadostree-d83d5b4a29924f208c6955a0917a152d07e4b4d6.tar.gz
[ASAN] metalink: Fix leaks of buffer
We should be religious about the "only set output variables on success", otherwise it makes leaks more likely. But the real leak was us simply not using autoptr in one place. Closes: #598 Approved by: jlebon
-rw-r--r--src/libostree/ostree-metalink.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/libostree/ostree-metalink.c b/src/libostree/ostree-metalink.c
index ad3d5bf9..b3c8b15a 100644
--- a/src/libostree/ostree-metalink.c
+++ b/src/libostree/ostree-metalink.c
@@ -479,7 +479,7 @@ try_one_url (OstreeMetalinkRequest *self,
ret = TRUE;
if (out_data)
- *out_data = g_bytes_ref (bytes);
+ *out_data = g_steal_pointer (&bytes);
out:
return ret;
}
@@ -492,6 +492,7 @@ try_metalink_targets (OstreeMetalinkRequest *self,
{
gboolean ret = FALSE;
SoupURI *target_uri = NULL;
+ g_autoptr(GBytes) ret_data = NULL;
if (!self->found_a_file_element)
{
@@ -546,7 +547,7 @@ try_metalink_targets (OstreeMetalinkRequest *self,
target_uri = self->urls->pdata[self->current_url_index];
- if (try_one_url (self, target_uri, out_data, &temp_error))
+ if (try_one_url (self, target_uri, &ret_data, &temp_error))
break;
else
{
@@ -568,6 +569,8 @@ try_metalink_targets (OstreeMetalinkRequest *self,
ret = TRUE;
if (out_target_uri)
*out_target_uri = soup_uri_copy (target_uri);
+ if (out_data)
+ *out_data = g_steal_pointer (&ret_data);
out:
return ret;
}
@@ -599,7 +602,7 @@ _ostree_metalink_request_sync (OstreeMetalink *self,
gboolean ret = FALSE;
OstreeMetalinkRequest request = { 0, };
g_autoptr(GMainContext) mainctx = NULL;
- GBytes *out_contents = NULL;
+ g_autoptr(GBytes) contents = NULL;
gsize len;
const guint8 *data;
@@ -614,13 +617,13 @@ _ostree_metalink_request_sync (OstreeMetalink *self,
self->uri,
FALSE,
FALSE,
- &out_contents,
+ &contents,
self->max_size,
cancellable,
error))
goto out;
- data = g_bytes_get_data (out_contents, &len);
+ data = g_bytes_get_data (contents, &len);
if (!g_markup_parse_context_parse (request.parser, (const char*)data, len, error))
goto out;