From: Michihiro NAKAJIMA Date: Sun, 27 Nov 2011 11:17:12 +0000 (-0500) Subject: The memory leaks I fixed in r3854 happened when liblzma verion < 5.0.3 X-Git-Tag: v3.0.1b~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b5ffcc0bd7f0f39102863d5c96ae91f02c74aaae;p=thirdparty%2Flibarchive.git The memory leaks I fixed in r3854 happened when liblzma verion < 5.0.3 SVN-Revision: 3862 --- diff --git a/libarchive/archive_read_support_filter_xz.c b/libarchive/archive_read_support_filter_xz.c index 65fbf48ec..cf762a46d 100644 --- a/libarchive/archive_read_support_filter_xz.c +++ b/libarchive/archive_read_support_filter_xz.c @@ -598,7 +598,9 @@ lzip_init(struct archive_read_filter *self) return (ARCHIVE_FATAL); } ret = lzma_raw_decoder(&(state->stream), filters); +#if LZMA_VERSION < 50000030 free(filters[0].options); +#endif if (ret != LZMA_OK) { set_error(self, ret); return (ARCHIVE_FATAL); diff --git a/libarchive/archive_read_support_format_7zip.c b/libarchive/archive_read_support_format_7zip.c index d19893d8d..dee262d89 100644 --- a/libarchive/archive_read_support_format_7zip.c +++ b/libarchive/archive_read_support_format_7zip.c @@ -791,7 +791,10 @@ init_decompression(struct archive_read *a, struct _7zip *zip, #endif { lzma_options_delta delta_opt; - lzma_filter filters[LZMA_FILTERS_MAX], *ff; + lzma_filter filters[LZMA_FILTERS_MAX]; +#if LZMA_VERSION < 50000030 + lzma_filter *ff; +#endif int fi = 0; if (zip->lzstream_valid) { @@ -857,7 +860,9 @@ init_decompression(struct archive_read *a, struct _7zip *zip, else filters[fi].id = LZMA_FILTER_LZMA1; filters[fi].options = NULL; +#if LZMA_VERSION < 50000030 ff = &filters[fi]; +#endif r = lzma_properties_decode(&filters[fi], NULL, folder->coders[0].properties, folder->coders[0].propertiesSize); @@ -870,7 +875,9 @@ init_decompression(struct archive_read *a, struct _7zip *zip, filters[fi].id = LZMA_VLI_UNKNOWN; filters[fi].options = NULL; r = lzma_raw_decoder(&(zip->lzstream), filters); +#if LZMA_VERSION < 50000030 free(ff->options); +#endif if (r != LZMA_OK) { set_error(a, r); return (ARCHIVE_FAILED);