Patches in the upstream archive_integer.h library, which both CVE fixes depend on. Resolves: RHEL-215400 Resolves: RHEL-215640
38 lines
1.5 KiB
Diff
38 lines
1.5 KiB
Diff
diff --git a/libarchive/archive_write_set_format_zip.c b/libarchive/archive_write_set_format_zip.c
|
|
index a9f2877..e267736 100644
|
|
--- a/libarchive/archive_write_set_format_zip.c
|
|
+++ b/libarchive/archive_write_set_format_zip.c
|
|
@@ -53,6 +53,7 @@
|
|
#include "archive_entry.h"
|
|
#include "archive_entry_locale.h"
|
|
#include "archive_hmac_private.h"
|
|
+#include "archive_integer.h"
|
|
#include "archive_private.h"
|
|
#include "archive_random_private.h"
|
|
#include "archive_write_private.h"
|
|
@@ -714,8 +715,13 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
|
|
default:
|
|
break;
|
|
}
|
|
- if (zip->entry_compression == COMPRESSION_STORE)
|
|
- zip->entry_compressed_size += additional_size;
|
|
+ if (zip->entry_compression == COMPRESSION_STORE &&
|
|
+ archive_ckd_add_i64(&zip->entry_compressed_size,
|
|
+ zip->entry_compressed_size, additional_size)) {
|
|
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
|
|
+ "File size too large for encrypted ZIP entry");
|
|
+ return (ARCHIVE_FAILED);
|
|
+ }
|
|
}
|
|
|
|
/*
|
|
@@ -729,7 +735,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
|
|
* (compression might make file larger)
|
|
*/
|
|
if ((zip->flags & ZIP_FLAG_FORCE_ZIP64)
|
|
- || (zip->entry_uncompressed_size + additional_size > ZIP_4GB_MAX)
|
|
+ || (zip->entry_uncompressed_size > ZIP_4GB_MAX - additional_size)
|
|
|| (zip->entry_uncompressed_size > ZIP_4GB_MAX_UNCOMPRESSED
|
|
&& zip->entry_compression != COMPRESSION_STORE)) {
|
|
MIN_VERSION_NEEDED(45);
|