From: Joerg Sonnenberger Date: Sat, 26 Jul 2008 00:42:01 +0000 (-0400) Subject: Avoid NULL dereference when destroy functions are called more X-Git-Tag: v2.6.0~130 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=79a91ee3c447db0b7fe6f9d59f588dc25ff6bd01;p=thirdparty%2Flibarchive.git Avoid NULL dereference when destroy functions are called more than once. SVN-Revision: 162 --- 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)