diff options
author | Colin Walters <walters@verbum.org> | 2016-11-28 22:01:33 -0500 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2016-11-30 18:51:26 +0000 |
commit | d83d5b4a29924f208c6955a0917a152d07e4b4d6 (patch) | |
tree | 774fed3f5d1b902f1ac786d38bb43165738e5dad | |
parent | 1bb6e514863d2faaa387d4609398c6043504d44b (diff) | |
download | ostree-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.c | 13 |
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; |