Define and use cleanup helpers for libarchive

This should fix some of the ASAN leaks around libarchive usage,
and is generally better.

Closes: #609
Approved by: jlebon
This commit is contained in:
Colin Walters authored and Atomic Bot committed 2016-12-05 15:20:56 +00:00
1 parent c733e21a84
commit 7bb0ff46a4
7 files changed
+61 -22

No files matched your search

@@ -23,6 +23,7 @@
#pragma once
#include <gio/gio.h>
#include "ostree-libarchive-private.h"
G_BEGIN_DECLS
+42
View File
@@ -0,0 +1,42 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright (C) 2016 Colin Walters <walters@verbum.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*
* Author: Alexander Larsson <alexl@redhat.com>
*/
#pragma once
#include <gio/gio.h>
#include "libglnx.h"
#ifdef HAVE_LIBARCHIVE
#include <archive.h>
#include <archive_entry.h>
#endif
G_BEGIN_DECLS
#ifdef HAVE_LIBARCHIVE
GLNX_DEFINE_CLEANUP_FUNCTION (void *, flatpak_local_free_write_archive, archive_write_free)
#define ot_cleanup_write_archive __attribute__((cleanup (flatpak_local_free_write_archive)))
GLNX_DEFINE_CLEANUP_FUNCTION (void *, flatpak_local_free_read_archive, archive_read_free)
#define ot_cleanup_read_archive __attribute__((cleanup (flatpak_local_free_read_archive)))
#endif
G_END_DECLS
+1 -3
View File
@@ -913,10 +913,9 @@ ostree_repo_write_archive_to_mtree (OstreeRepo *self,
{
#ifdef HAVE_LIBARCHIVE
gboolean ret = FALSE;
struct archive *a = NULL;
ot_cleanup_read_archive struct archive *a = archive_read_new ();
OstreeRepoImportArchiveOptions opts = { 0, };
a = archive_read_new ();
#ifdef HAVE_ARCHIVE_READ_SUPPORT_FILTER_ALL
archive_read_support_filter_all (a);
#else
@@ -945,7 +944,6 @@ ostree_repo_write_archive_to_mtree (OstreeRepo *self,
if (a)
{
(void)archive_read_close (a);
(void)archive_read_free (a);
}
return ret;
#else
+2 -5
View File
@@ -24,6 +24,7 @@
#include "ot-builtins.h"
#include "ostree.h"
#include "ostree-repo-file.h"
#include "ostree-libarchive-private.h"
#include "otutil.h"
#ifdef HAVE_LIBARCHIVE
@@ -67,7 +68,7 @@ ostree_builtin_export (int argc, char **argv, GCancellable *cancellable, GError
g_autoptr(GFile) subtree = NULL;
g_autofree char *commit = NULL;
g_autoptr(GVariant) commit_data = NULL;
struct archive *a = NULL;
ot_cleanup_write_archive struct archive *a = NULL;
OstreeRepoExportArchiveOptions opts = { 0, };
context = g_option_context_new ("COMMIT - Stream COMMIT to stdout in tar format");
@@ -154,10 +155,6 @@ ostree_builtin_export (int argc, char **argv, GCancellable *cancellable, GError
ret = TRUE;
out:
#ifdef HAVE_LIBARCHIVE
if (a)
archive_write_free (a);
#endif
if (context)
g_option_context_free (context);
return ret;