From 04f6b80e18391c6673ad8b439e221d2759f8e133 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fran=C3=A7ois=20Degros?= Date: Mon, 25 May 2026 15:27:37 +1000 Subject: [PATCH] 7-Zip: Set error message when reading ahead fails Nice to have more explicit error messages. --- libarchive/archive_read_support_format_7zip.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/libarchive/archive_read_support_format_7zip.c b/libarchive/archive_read_support_format_7zip.c index 2f1ab7d75..599561873 100644 --- a/libarchive/archive_read_support_format_7zip.c +++ b/libarchive/archive_read_support_format_7zip.c @@ -537,8 +537,11 @@ get_data_offset(struct archive_read *a, int64_t *data_offset) int64_t offset, sfx_offset; int r, window; - if ((p = __archive_read_ahead(a, 6, NULL)) == NULL) - goto fail; + if ((p = __archive_read_ahead(a, 6, NULL)) == NULL) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Truncated 7-Zip file body"); + return (ARCHIVE_FATAL); + } /* If first six bytes are the 7-Zip signature, * return the offset right now. */ @@ -3272,8 +3275,11 @@ slurp_central_directory(struct archive_read *a, struct _7zip *zip, archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, "Seek error"); return (ARCHIVE_FATAL); } - if ((p = __archive_read_ahead(a, 32, &bytes_avail)) == NULL) + if ((p = __archive_read_ahead(a, 32, &bytes_avail)) == NULL) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Truncated 7-Zip file header"); return (ARCHIVE_FATAL); + } zip->seek_base = (uint64_t)data_offset + 32; -- 2.47.3