From 79a91ee3c447db0b7fe6f9d59f588dc25ff6bd01 Mon Sep 17 00:00:00 2001 From: Joerg Sonnenberger Date: Fri, 25 Jul 2008 20:42:01 -0400 Subject: [PATCH] Avoid NULL dereference when destroy functions are called more than once. SVN-Revision: 162 --- libarchive/archive_write_set_format_ar.c | 3 +++ libarchive/archive_write_set_format_pax.c | 3 +++ libarchive/archive_write_set_format_shar.c | 2 ++ 3 files changed, 8 insertions(+) diff --git a/libarchive/archive_write_set_format_ar.c b/libarchive/archive_write_set_format_ar.c index 7176e6e2f..d93f3cb8d 100644 --- a/libarchive/archive_write_set_format_ar.c +++ b/libarchive/archive_write_set_format_ar.c @@ -389,6 +389,9 @@ archive_write_ar_destroy(struct archive_write *a) ar = (struct ar_w *)a->format_data; + if (ar == NULL) + return (ARCHIVE_OK); + if (ar->has_strtab > 0) { free(ar->strtab); ar->strtab = NULL; diff --git a/libarchive/archive_write_set_format_pax.c b/libarchive/archive_write_set_format_pax.c index 3e294cdf0..1b29c5fc7 100644 --- a/libarchive/archive_write_set_format_pax.c +++ b/libarchive/archive_write_set_format_pax.c @@ -1200,6 +1200,9 @@ archive_write_pax_destroy(struct archive_write *a) struct pax *pax; pax = (struct pax *)a->format_data; + if (pax == NULL) + return (ARCHIVE_OK); + archive_string_free(&pax->pax_header); free(pax); a->format_data = NULL; diff --git a/libarchive/archive_write_set_format_shar.c b/libarchive/archive_write_set_format_shar.c index b5d16e09d..a6eaebff5 100644 --- a/libarchive/archive_write_set_format_shar.c +++ b/libarchive/archive_write_set_format_shar.c @@ -549,6 +549,8 @@ archive_write_shar_destroy(struct archive_write *a) struct shar *shar; shar = (struct shar *)a->format_data; + if (shar == NULL) + return (ARCHIVE_OK); if (shar->entry != NULL) archive_entry_free(shar->entry); if (shar->last_dir != NULL) -- 2.47.3