Compare commits
No commits in common. 'c9' and 'i10c-beta' have entirely different histories.
@ -1 +1 @@
|
|||||||
SOURCES/libarchive-3.5.3.tar.gz
|
SOURCES/libarchive-3.7.2.tar.gz
|
||||||
|
@ -1 +1 @@
|
|||||||
361b38405f4d6d01b22e4534aa7c217f5fa2db56 SOURCES/libarchive-3.5.3.tar.gz
|
f3fab029fed3610aa863cac056e151ce7fba0323 SOURCES/libarchive-3.7.2.tar.gz
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
From 375bbe7d20284f205ebb73652ef61ae6fceac344 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lukas Javorsky <ljavorsk@redhat.com>
|
||||||
|
Date: Tue, 18 Jul 2023 10:29:22 +0000
|
||||||
|
Subject: [PATCH] Drop rmd160 from OpenSSL
|
||||||
|
|
||||||
|
---
|
||||||
|
configure.ac | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 7f5dbdf..179fb2d 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -1300,7 +1300,6 @@ if test "x$with_openssl" != "xno"; then
|
||||||
|
LIBSREQUIRED="$LIBSREQUIRED${LIBSREQUIRED:+ }libcrypto"
|
||||||
|
AC_CHECK_LIB(crypto,OPENSSL_config)
|
||||||
|
CRYPTO_CHECK(MD5, OPENSSL, md5)
|
||||||
|
- CRYPTO_CHECK(RMD160, OPENSSL, rmd160)
|
||||||
|
CRYPTO_CHECK(SHA1, OPENSSL, sha1)
|
||||||
|
CRYPTO_CHECK(SHA256, OPENSSL, sha256)
|
||||||
|
CRYPTO_CHECK(SHA384, OPENSSL, sha384)
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,32 @@
|
|||||||
|
From 3bd918d92f8c34ba12de9c6604d96f9e262a59fc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Martin Matuska <martin@matuska.de>
|
||||||
|
Date: Tue, 12 Sep 2023 08:54:47 +0200
|
||||||
|
Subject: [PATCH] tests: fix zstd long option test for 32-bit architectures
|
||||||
|
|
||||||
|
Fixes #1968
|
||||||
|
---
|
||||||
|
libarchive/test/test_write_filter_zstd.c | 8 ++++++--
|
||||||
|
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libarchive/test/test_write_filter_zstd.c b/libarchive/test/test_write_filter_zstd.c
|
||||||
|
index 3cdbd812..c9731f1b 100644
|
||||||
|
--- a/libarchive/test/test_write_filter_zstd.c
|
||||||
|
+++ b/libarchive/test/test_write_filter_zstd.c
|
||||||
|
@@ -161,8 +161,12 @@ DEFINE_TEST(test_write_filter_zstd)
|
||||||
|
archive_write_set_filter_option(a, NULL, "max-frame-size", "1048576"));
|
||||||
|
#endif
|
||||||
|
#if ZSTD_VERSION_NUMBER >= MINVER_LONG
|
||||||
|
- assertEqualIntA(a, ARCHIVE_OK,
|
||||||
|
- archive_write_set_filter_option(a, NULL, "long", "27"));
|
||||||
|
+ if ((int)(sizeof(size_t) == 4))
|
||||||
|
+ assertEqualIntA(a, ARCHIVE_OK,
|
||||||
|
+ archive_write_set_filter_option(a, NULL, "long", "26"));
|
||||||
|
+ else
|
||||||
|
+ assertEqualIntA(a, ARCHIVE_OK,
|
||||||
|
+ archive_write_set_filter_option(a, NULL, "long", "27"));
|
||||||
|
assertEqualIntA(a, ARCHIVE_FAILED,
|
||||||
|
archive_write_set_filter_option(a, NULL, "long", "-1")); /* negative */
|
||||||
|
#endif
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -0,0 +1,25 @@
|
|||||||
|
From 2910a5736c3f238d2cde6cc757b01868d877ebcb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wei-Cheng Pan <legnaleurc@gmail.com>
|
||||||
|
Date: Sun, 21 Apr 2024 19:11:42 +0900
|
||||||
|
Subject: [PATCH] fix: OOB in rar e8 filter
|
||||||
|
|
||||||
|
---
|
||||||
|
libarchive/archive_read_support_format_rar.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/libarchive/archive_read_support_format_rar.c b/libarchive/archive_read_support_format_rar.c
|
||||||
|
index 99a11d17..266d0ee9 100644
|
||||||
|
--- a/libarchive/archive_read_support_format_rar.c
|
||||||
|
+++ b/libarchive/archive_read_support_format_rar.c
|
||||||
|
@@ -3615,7 +3615,7 @@ execute_filter_e8(struct rar_filter *filter, struct rar_virtual_machine *vm, siz
|
||||||
|
uint32_t filesize = 0x1000000;
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
|
- if (length > PROGRAM_WORK_SIZE || length < 4)
|
||||||
|
+ if (length > PROGRAM_WORK_SIZE || length <= 4)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (i = 0; i <= length - 5; i++)
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
@ -0,0 +1,119 @@
|
|||||||
|
From eac15e252010c1189a5c0f461364dbe2cd2a68b1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Dustin L. Howett" <dustin@howett.net>
|
||||||
|
Date: Thu, 9 May 2024 18:59:17 -0500
|
||||||
|
Subject: [PATCH] rar4 reader: protect copy_from_lzss_window_to_unp() (#2172)
|
||||||
|
|
||||||
|
copy_from_lzss_window_to_unp unnecessarily took an `int` parameter where
|
||||||
|
both of its callers were holding a `size_t`.
|
||||||
|
|
||||||
|
A lzss opcode chain could be constructed that resulted in a negative
|
||||||
|
copy length, which when passed into memcpy would result in a very, very
|
||||||
|
large positive number.
|
||||||
|
|
||||||
|
Switching copy_from_lzss_window_to_unp to take a `size_t` allows it to
|
||||||
|
properly bounds-check length.
|
||||||
|
|
||||||
|
In addition, this patch also ensures that `length` is not itself larger
|
||||||
|
than the destination buffer.
|
||||||
|
|
||||||
|
Security: CVE-2024-20696
|
||||||
|
---
|
||||||
|
libarchive/archive_read_support_format_rar.c | 28 +++++++++++++-------
|
||||||
|
1 file changed, 18 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libarchive/archive_read_support_format_rar.c b/libarchive/archive_read_support_format_rar.c
|
||||||
|
index 4fc6626c..5776df4b 100644
|
||||||
|
--- a/libarchive/archive_read_support_format_rar.c
|
||||||
|
+++ b/libarchive/archive_read_support_format_rar.c
|
||||||
|
@@ -432,7 +432,7 @@ static int make_table_recurse(struct archive_read *, struct huffman_code *, int,
|
||||||
|
struct huffman_table_entry *, int, int);
|
||||||
|
static int expand(struct archive_read *, int64_t *);
|
||||||
|
static int copy_from_lzss_window_to_unp(struct archive_read *, const void **,
|
||||||
|
- int64_t, int);
|
||||||
|
+ int64_t, size_t);
|
||||||
|
static const void *rar_read_ahead(struct archive_read *, size_t, ssize_t *);
|
||||||
|
static int parse_filter(struct archive_read *, const uint8_t *, uint16_t,
|
||||||
|
uint8_t);
|
||||||
|
@@ -2060,7 +2060,7 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
|
||||||
|
bs = rar->unp_buffer_size - rar->unp_offset;
|
||||||
|
else
|
||||||
|
bs = (size_t)rar->bytes_uncopied;
|
||||||
|
- ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, (int)bs);
|
||||||
|
+ ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, bs);
|
||||||
|
if (ret != ARCHIVE_OK)
|
||||||
|
return (ret);
|
||||||
|
rar->offset += bs;
|
||||||
|
@@ -2213,7 +2213,7 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
|
||||||
|
bs = rar->unp_buffer_size - rar->unp_offset;
|
||||||
|
else
|
||||||
|
bs = (size_t)rar->bytes_uncopied;
|
||||||
|
- ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, (int)bs);
|
||||||
|
+ ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, bs);
|
||||||
|
if (ret != ARCHIVE_OK)
|
||||||
|
return (ret);
|
||||||
|
rar->offset += bs;
|
||||||
|
@@ -3094,11 +3094,16 @@ copy_from_lzss_window(struct archive_read *a, void *buffer,
|
||||||
|
|
||||||
|
static int
|
||||||
|
copy_from_lzss_window_to_unp(struct archive_read *a, const void **buffer,
|
||||||
|
- int64_t startpos, int length)
|
||||||
|
+ int64_t startpos, size_t length)
|
||||||
|
{
|
||||||
|
int windowoffs, firstpart;
|
||||||
|
struct rar *rar = (struct rar *)(a->format->data);
|
||||||
|
|
||||||
|
+ if (length > rar->unp_buffer_size)
|
||||||
|
+ {
|
||||||
|
+ goto fatal;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (!rar->unp_buffer)
|
||||||
|
{
|
||||||
|
if ((rar->unp_buffer = malloc(rar->unp_buffer_size)) == NULL)
|
||||||
|
@@ -3110,17 +3115,17 @@ copy_from_lzss_window_to_unp(struct archive_read *a, const void **buffer,
|
||||||
|
}
|
||||||
|
|
||||||
|
windowoffs = lzss_offset_for_position(&rar->lzss, startpos);
|
||||||
|
- if(windowoffs + length <= lzss_size(&rar->lzss)) {
|
||||||
|
+ if(windowoffs + length <= (size_t)lzss_size(&rar->lzss)) {
|
||||||
|
memcpy(&rar->unp_buffer[rar->unp_offset], &rar->lzss.window[windowoffs],
|
||||||
|
length);
|
||||||
|
- } else if (length <= lzss_size(&rar->lzss)) {
|
||||||
|
+ } else if (length <= (size_t)lzss_size(&rar->lzss)) {
|
||||||
|
firstpart = lzss_size(&rar->lzss) - windowoffs;
|
||||||
|
if (firstpart < 0) {
|
||||||
|
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
|
||||||
|
"Bad RAR file data");
|
||||||
|
return (ARCHIVE_FATAL);
|
||||||
|
}
|
||||||
|
- if (firstpart < length) {
|
||||||
|
+ if ((size_t)firstpart < length) {
|
||||||
|
memcpy(&rar->unp_buffer[rar->unp_offset],
|
||||||
|
&rar->lzss.window[windowoffs], firstpart);
|
||||||
|
memcpy(&rar->unp_buffer[rar->unp_offset + firstpart],
|
||||||
|
@@ -3130,9 +3135,7 @@ copy_from_lzss_window_to_unp(struct archive_read *a, const void **buffer,
|
||||||
|
&rar->lzss.window[windowoffs], length);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
- archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
|
||||||
|
- "Bad RAR file data");
|
||||||
|
- return (ARCHIVE_FATAL);
|
||||||
|
+ goto fatal;
|
||||||
|
}
|
||||||
|
rar->unp_offset += length;
|
||||||
|
if (rar->unp_offset >= rar->unp_buffer_size)
|
||||||
|
@@ -3140,6 +3143,11 @@ copy_from_lzss_window_to_unp(struct archive_read *a, const void **buffer,
|
||||||
|
else
|
||||||
|
*buffer = NULL;
|
||||||
|
return (ARCHIVE_OK);
|
||||||
|
+
|
||||||
|
+fatal:
|
||||||
|
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
|
||||||
|
+ "Bad RAR file data");
|
||||||
|
+ return (ARCHIVE_FATAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const void *
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
@ -1,14 +0,0 @@
|
|||||||
# Patch sources from libarchive upstream
|
|
||||||
# Source: https://github.com/libarchive/libarchive/commit/cfaa28168a07ea4a53276b63068f94fce37d6aff
|
|
||||||
|
|
||||||
--- libarchive-3.5.3/libarchive/archive_read_support_format_zip.c.old 2022-05-18 08:55:50.861574517 +0000
|
|
||||||
+++ libarchive-3.5.3/libarchive/archive_read_support_format_zip.c 2022-05-18 08:57:03.049574517 +0000
|
|
||||||
@@ -1657,7 +1657,7 @@ zipx_lzma_alone_init(struct archive_read
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Read magic1,magic2,lzma_params from the ZIPX stream. */
|
|
||||||
- if((p = __archive_read_ahead(a, 9, NULL)) == NULL) {
|
|
||||||
+ if(zip->entry_bytes_remaining < 9 || (p = __archive_read_ahead(a, 9, NULL)) == NULL) {
|
|
||||||
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
|
|
||||||
"Truncated lzma data");
|
|
||||||
return (ARCHIVE_FATAL);
|
|
@ -1,38 +0,0 @@
|
|||||||
From bff38efe8c110469c5080d387bec62a6ca15b1a5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: obiwac <obiwac@gmail.com>
|
|
||||||
Date: Fri, 22 Jul 2022 22:41:10 +0200
|
|
||||||
Subject: [PATCH] libarchive: Handle a `calloc` returning NULL (fixes #1754)
|
|
||||||
|
|
||||||
---
|
|
||||||
libarchive/archive_write.c | 8 ++++++++
|
|
||||||
1 file changed, 8 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/libarchive/archive_write.c b/libarchive/archive_write.c
|
|
||||||
index 66592e82..27626b54 100644
|
|
||||||
--- a/libarchive/archive_write.c
|
|
||||||
+++ b/libarchive/archive_write.c
|
|
||||||
@@ -201,6 +201,10 @@ __archive_write_allocate_filter(struct archive *_a)
|
|
||||||
struct archive_write_filter *f;
|
|
||||||
|
|
||||||
f = calloc(1, sizeof(*f));
|
|
||||||
+
|
|
||||||
+ if (f == NULL)
|
|
||||||
+ return (NULL);
|
|
||||||
+
|
|
||||||
f->archive = _a;
|
|
||||||
f->state = ARCHIVE_WRITE_FILTER_STATE_NEW;
|
|
||||||
if (a->filter_first == NULL)
|
|
||||||
@@ -548,6 +552,10 @@ archive_write_open2(struct archive *_a, void *client_data,
|
|
||||||
a->client_data = client_data;
|
|
||||||
|
|
||||||
client_filter = __archive_write_allocate_filter(_a);
|
|
||||||
+
|
|
||||||
+ if (client_filter == NULL)
|
|
||||||
+ return (ARCHIVE_FATAL);
|
|
||||||
+
|
|
||||||
client_filter->open = archive_write_client_open;
|
|
||||||
client_filter->write = archive_write_client_write;
|
|
||||||
client_filter->close = archive_write_client_close;
|
|
||||||
--
|
|
||||||
2.37.3
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
From afef3d7fc131df0dac09a46b8673898860a193db Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Zambersky <zzambers@redhat.com>
|
|
||||||
Date: Tue, 11 Jan 2022 14:43:27 +0100
|
|
||||||
Subject: [PATCH] Fixed size filed in pax header
|
|
||||||
|
|
||||||
---
|
|
||||||
libarchive/archive_write_set_format_pax.c | 10 +++++++---
|
|
||||||
1 file changed, 7 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/libarchive/archive_write_set_format_pax.c b/libarchive/archive_write_set_format_pax.c
|
|
||||||
index a2b27107..52911491 100644
|
|
||||||
--- a/libarchive/archive_write_set_format_pax.c
|
|
||||||
+++ b/libarchive/archive_write_set_format_pax.c
|
|
||||||
@@ -1028,10 +1028,8 @@ archive_write_pax_header(struct archive_write *a,
|
|
||||||
archive_string_init(&entry_name);
|
|
||||||
archive_strcpy(&entry_name, archive_entry_pathname(entry_main));
|
|
||||||
|
|
||||||
- /* If file size is too large, add 'size' to pax extended attrs. */
|
|
||||||
+ /* If file size is too large, we need pax extended attrs. */
|
|
||||||
if (archive_entry_size(entry_main) >= (((int64_t)1) << 33)) {
|
|
||||||
- add_pax_attr_int(&(pax->pax_header), "size",
|
|
||||||
- archive_entry_size(entry_main));
|
|
||||||
need_extension = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1347,6 +1345,12 @@ archive_write_pax_header(struct archive_write *a,
|
|
||||||
mapsize + pax->sparse_map_padding + sparse_total);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* If file size is too large, add 'size' to pax extended attrs. */
|
|
||||||
+ if (archive_entry_size(entry_main) >= (((int64_t)1) << 33)) {
|
|
||||||
+ add_pax_attr_int(&(pax->pax_header), "size",
|
|
||||||
+ archive_entry_size(entry_main));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* Format 'ustar' header for main entry.
|
|
||||||
*
|
|
||||||
* The trouble with file size: If the reader can't understand
|
|
||||||
--
|
|
||||||
2.34.3
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
|||||||
--- libarchive-3.5.1/libarchive/archive_digest.c.old 2021-05-27 15:46:54.988302284 +0200
|
|
||||||
+++ libarchive-3.5.1/libarchive/archive_digest.c 2021-05-27 15:50:03.519746886 +0200
|
|
||||||
@@ -432,9 +432,11 @@
|
|
||||||
static int
|
|
||||||
__archive_ripemd160init(archive_rmd160_ctx *ctx)
|
|
||||||
{
|
|
||||||
+ int ret;
|
|
||||||
if ((*ctx = EVP_MD_CTX_new()) == NULL)
|
|
||||||
return (ARCHIVE_FAILED);
|
|
||||||
- EVP_DigestInit(*ctx, EVP_ripemd160());
|
|
||||||
+ if (!(ret = EVP_DigestInit(*ctx, EVP_ripemd160())))
|
|
||||||
+ return (ARCHIVE_FAILED);
|
|
||||||
return (ARCHIVE_OK);
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in new issue