80 lines
2.6 KiB
Diff
80 lines
2.6 KiB
Diff
From: Colin Walters <walters@verbum.org>
|
|
Date: Mon, 28 Nov 2016 22:01:33 -0500
|
|
Subject: [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
|
|
---
|
|
src/libostree/ostree-metalink.c | 13 ++++++++-----
|
|
1 file changed, 8 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/libostree/ostree-metalink.c b/src/libostree/ostree-metalink.c
|
|
index ad3d5bf..b3c8b15 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;
|
|
|