Date: Fri, 20 Jun 2025 20:43:32 GMT From: Martin Matuska <mm@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: f47afeb2ce1e - stable/13 - libarchive: merge from vendor branch Message-ID: <202506202043.55KKhWot031198@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by mm: URL: https://cgit.FreeBSD.org/src/commit/?id=f47afeb2ce1eb04a787a4b8c1a6d7752940268da commit f47afeb2ce1eb04a787a4b8c1a6d7752940268da Author: Martin Matuska <mm@FreeBSD.org> AuthorDate: 2025-06-01 20:16:26 +0000 Commit: Martin Matuska <mm@FreeBSD.org> CommitDate: 2025-06-20 20:14:01 +0000 libarchive: merge from vendor branch libarchive 3.8.1 New features: #2088 7-zip reader: improve self-extracting archive detection #2137 zip writer: added XZ, LZMA, ZSTD and BZIP2 support #2403 zip writer: added LZMA + RISCV BCJ filter #2601 bsdtar: support --mtime and --clamp-mtime #2602 libarchive: mbedtls 3.x compatibility Security fixes: #2422 tar reader: Handle truncation in the middle of a GNU long linkname (CVE-2024-57970) #2532 tar reader: fix unchecked return value in list_item_verbose() (CVE-2025-25724) #2532 unzip: fix null pointer dereference (CVE-2025-1632) #2568 warc: prevent signed integer overflow (CVE-2025-5916) #2584 rar: do not skip past EOF while reading (CVE-2025-5918) #2588 tar: fix overflow in build_ustar_entry (CVE-2025-5917) #2598 rar: fix double free with over 4 billion nodes (CVE-2025-5914) #2599 rar: fix heap-buffer-overflow (CVE-2025-5915) Important bugfixes: #2399 7-zip reader: add SPARC filter support for non-LZMA compressors #2405 tar reader: ignore ustar size when pax size is present #2435 tar writer: fix bug when -s/a/b/ used more than once with b flag #2459 7-zip reader: add POWERPC filter support for non-LZMA compressors #2519 libarchive: handle ARCHIVE_FILTER_LZOP in archive_read_append_filter #2539 libarchive: add missing seeker function to archive_read_open_FILE() #2544 gzip: allow setting the original filename for gzip compressed files #2564 libarchive: improve lseek handling #2582 rar: support large headers on 32 bit systems #2587 bsdtar: don't hardlink negative inode files together #2596 rar: support large headers on 32 bit systems #2606 libarchive: support @-prefixed Unix epoch timestamps as date strings #2634 tar: Support negative time values with pax #2637 tar: Keep block alignment after pax error #2642 libarchive: fix FILE_skip regression #2643 tar: Handle extra bytes after sparse entries #2649 compress: Prevent call stack overflow #2651 iso9660: always check archive_string_ensure return value CVE: CVE-2024-57970, CVE-2025-1632, CVE-2025-25724, CVE-2025-5914, CVE-2025-5915, CVE-2025-5916, CVE-2025-5917, CVE-2025-5918 PR: 286944 (exp-run on main, libarchive 3.8.0) (cherry picked from commit 2e113ef82465598b8c26e0ca415fbe90677fbd47) --- contrib/libarchive/COPYING | 2 +- contrib/libarchive/NEWS | 8 + contrib/libarchive/README.md | 9 +- .../github_actions/install-macos-dependencies.sh | 19 + contrib/libarchive/cpio/cpio.c | 2 +- contrib/libarchive/cpio/test/test_format_newc.c | 12 +- contrib/libarchive/cpio/test/test_option_a.c | 2 +- contrib/libarchive/cpio/test/test_option_c.c | 8 +- contrib/libarchive/libarchive/archive.h | 57 +- contrib/libarchive/libarchive/archive_acl.c | 14 +- .../libarchive/libarchive/archive_acl_private.h | 2 +- contrib/libarchive/libarchive/archive_cmdline.c | 2 +- .../libarchive/archive_cryptor_private.h | 8 + contrib/libarchive/libarchive/archive_digest.c | 344 +- .../libarchive/libarchive/archive_digest_private.h | 35 +- .../libarchive/archive_disk_acl_freebsd.c | 4 +- contrib/libarchive/libarchive/archive_entry.c | 54 +- contrib/libarchive/libarchive/archive_entry.h | 84 +- .../libarchive/archive_entry_link_resolver.c | 8 + .../libarchive/libarchive/archive_entry_locale.h | 2 +- .../libarchive/libarchive/archive_entry_private.h | 13 +- .../libarchive/libarchive/archive_hmac_private.h | 2 +- contrib/libarchive/libarchive/archive_match.c | 102 +- contrib/libarchive/libarchive/archive_options.c | 4 +- .../libarchive/archive_options_private.h | 4 +- contrib/libarchive/libarchive/archive_pack_dev.h | 2 +- .../{archive_getdate.c => archive_parse_date.c} | 65 +- contrib/libarchive/libarchive/archive_platform.h | 5 + .../libarchive/libarchive/archive_platform_acl.h | 2 +- .../libarchive/libarchive/archive_platform_xattr.h | 2 +- contrib/libarchive/libarchive/archive_ppmd7.c | 11 +- contrib/libarchive/libarchive/archive_ppmd8.c | 15 +- .../libarchive/libarchive/archive_ppmd_private.h | 18 +- .../libarchive/libarchive/archive_random_private.h | 2 +- contrib/libarchive/libarchive/archive_rb.h | 2 +- contrib/libarchive/libarchive/archive_read.c | 6 - .../libarchive/archive_read_append_filter.c | 4 + .../libarchive/archive_read_disk_entry_from_file.c | 2 +- .../libarchive/archive_read_disk_posix.c | 9 +- .../libarchive/archive_read_disk_private.h | 7 +- .../libarchive/libarchive/archive_read_format.3 | 15 + .../libarchive/libarchive/archive_read_open_fd.c | 42 +- .../libarchive/libarchive/archive_read_open_file.c | 121 +- .../libarchive/archive_read_open_filename.c | 61 +- .../archive_read_support_filter_by_code.c | 14 - .../archive_read_support_filter_compress.c | 3 +- .../libarchive/archive_read_support_filter_lz4.c | 1 - .../libarchive/archive_read_support_format_7zip.c | 445 +- .../archive_read_support_format_by_code.c | 15 - .../libarchive/archive_read_support_format_cab.c | 7 +- .../libarchive/archive_read_support_format_cpio.c | 22 +- .../archive_read_support_format_iso9660.c | 4 +- .../libarchive/archive_read_support_format_lha.c | 73 +- .../libarchive/archive_read_support_format_rar.c | 184 +- .../libarchive/archive_read_support_format_rar5.c | 101 +- .../libarchive/archive_read_support_format_tar.c | 409 +- .../libarchive/archive_read_support_format_warc.c | 7 +- .../libarchive/archive_read_support_format_xar.c | 355 +- .../libarchive/archive_read_support_format_zip.c | 33 +- contrib/libarchive/libarchive/archive_string.c | 141 +- .../libarchive/archive_string_composition.h | 3 +- .../libarchive/libarchive/archive_string_sprintf.c | 11 +- contrib/libarchive/libarchive/archive_time.c | 163 + .../{archive_getdate.h => archive_time_private.h} | 26 +- contrib/libarchive/libarchive/archive_util.c | 76 +- .../libarchive/archive_version_details.c | 405 +- contrib/libarchive/libarchive/archive_write.c | 2 +- .../archive_write_add_filter_b64encode.c | 2 +- .../libarchive/archive_write_add_filter_gzip.c | 19 +- .../libarchive/archive_write_add_filter_uuencode.c | 2 +- .../libarchive/archive_write_disk_posix.c | 15 +- .../libarchive/archive_write_open_filename.c | 8 +- .../libarchive/archive_write_set_format_7zip.c | 298 +- .../libarchive/archive_write_set_format_gnutar.c | 16 +- .../libarchive/archive_write_set_format_iso9660.c | 25 +- .../libarchive/archive_write_set_format_mtree.c | 123 +- .../libarchive/archive_write_set_format_pax.c | 6 +- .../libarchive/archive_write_set_format_xar.c | 692 +- .../libarchive/archive_write_set_format_zip.c | 986 +- .../libarchive/archive_write_set_options.3 | 43 +- contrib/libarchive/libarchive/libarchive-formats.5 | 20 +- .../libarchive/libarchive/test/read_open_memory.c | 2 +- .../libarchive/test/test_7zip_filename_encoding.c | 200 +- contrib/libarchive/libarchive/test/test_acl_pax.c | 8 +- .../libarchive/test/test_acl_platform_nfs4.c | 10 +- .../libarchive/test/test_acl_platform_posix1e.c | 3 +- .../libarchive/libarchive/test/test_acl_posix1e.c | 8 +- contrib/libarchive/libarchive/test/test_acl_text.c | 2 +- .../libarchive/test/test_archive_match_time.c | 71 +- ...archive_getdate.c => test_archive_parse_date.c} | 21 +- .../test/test_archive_string_conversion.c | 4 +- .../libarchive/test/test_compat_gtar_large.c | 224 + .../libarchive/test/test_compat_solaris_tar_acl.c | 4 +- .../libarchive/test/test_compat_star_acl.c | 6 +- contrib/libarchive/libarchive/test/test_entry.c | 2 +- .../libarchive/libarchive/test/test_open_file.c | 9 +- .../test/test_read_disk_directory_traversals.c | 2 +- .../libarchive/test/test_read_format_7zip.c | 315 +- .../test_read_format_7zip_deflate_powerpc.7z.uu | 55 + .../test_read_format_7zip_extract_second.7z.uu | 22 +- .../test/test_read_format_7zip_lzma2_powerpc.7z.uu | 48 + .../test/test_read_format_7zip_lzma2_riscv.7z.uu | 49 + .../test/test_read_format_7zip_lzma2_sparc.7z.uu | 51 + .../test/test_read_format_7zip_sfx_elf.elf.uu | 9442 ++++++++++++++++++++ .../test_read_format_7zip_sfx_modified_pe.exe.uu | 109 + .../test/test_read_format_7zip_sfx_pe.exe.uu | 4751 ++++++++++ .../test/test_read_format_7zip_zstd_sparc.7z.uu | 59 + .../test/test_read_format_gtar_redundant_L.c | 40 + .../test_read_format_gtar_redundant_L.tar.Z.uu | 16 + .../libarchive/test/test_read_format_gtar_sparse.c | 8 +- .../test/test_read_format_gtar_sparse_length.c | 53 + .../test_read_format_gtar_sparse_length.tar.Z.uu | 12 + ...est_read_format_gtar_sparse_skip_entry.tar.Z.uu | 18 +- .../libarchive/test/test_read_format_rar.c | 74 +- .../libarchive/test/test_read_format_rar5.c | 29 +- .../test/test_read_format_rar5_unicode.rar.uu | 18 +- .../test/test_read_format_rar_encryption.c | 4 +- .../test/test_read_format_rar_endarc_huge.rar.uu | 4 + .../test/test_read_format_rar_newsub_huge.rar.uu | 5 + .../test/test_read_format_rar_overflow.c | 48 + .../test/test_read_format_rar_overflow.rar.uu | 11 + .../test/test_read_format_rar_symlink_huge.rar.uu | 5 + .../test_read_format_tar_empty_with_gnulabel.c | 2 +- .../test/test_read_format_tar_mac_metadata.c | 85 + .../test_read_format_tar_mac_metadata_1.tar.uu | 231 + .../test/test_read_format_tar_pax_g_large.c | 53 + .../test/test_read_format_tar_pax_g_large.tar.uu | 49 + .../test/test_read_format_tar_pax_negative_time.c | 68 + .../test_read_format_tar_pax_negative_time.tar.uu | 60 + .../libarchive/test/test_read_format_warc.c | 24 + .../test/test_read_format_warc_incomplete.warc.uu | 10 + .../libarchive/test/test_read_format_zip.c | 5 +- .../test/test_read_pax_empty_val_no_nl.c | 65 + .../test/test_read_pax_empty_val_no_nl.tar.uu | 60 + .../libarchive/test/test_read_position.c | 2 +- .../libarchive/libarchive/test/test_sparse_basic.c | 8 +- .../libarchive/libarchive/test/test_tar_large.c | 2 +- .../libarchive/test/test_write_disk_perms.c | 8 +- .../test/test_write_disk_secure_noabsolutepaths.c | 4 +- .../libarchive/test/test_write_filter_gzip.c | 5 +- .../libarchive/test/test_write_format_7zip.c | 6 + .../libarchive/test/test_write_format_7zip_large.c | 6 + .../libarchive/test/test_write_format_gnutar.c | 29 +- .../test/test_write_format_mtree_preset_digests.c | 2107 +++++ .../libarchive/test/test_write_format_tar_sparse.c | 4 +- .../libarchive/test/test_write_format_xar.c | 39 + .../test/test_write_format_zip64_stream.c | 192 +- .../test/test_write_format_zip_compression_bzip2.c | 362 + .../test_write_format_zip_compression_lzmaxz.c | 425 + .../test/test_write_format_zip_compression_store.c | 277 +- .../test/test_write_format_zip_compression_zstd.c | 366 + .../test/test_write_format_zip_entry_size_unset.c | 150 +- .../libarchive/test/test_write_format_zip_file.c | 164 +- .../test/test_write_format_zip_file_zip64.c | 192 +- .../libarchive/test/test_write_format_zip_large.c | 35 +- .../libarchive/test/test_write_format_zip_stream.c | 156 +- contrib/libarchive/libarchive_fe/passphrase.c | 10 +- contrib/libarchive/tar/bsdtar.1 | 74 +- contrib/libarchive/tar/bsdtar.c | 35 +- contrib/libarchive/tar/bsdtar.h | 12 +- contrib/libarchive/tar/cmdline.c | 2 + contrib/libarchive/tar/subst.c | 1 + contrib/libarchive/tar/test/test_list_item.c | 63 + contrib/libarchive/tar/test/test_list_item.tar.uu | 169 + contrib/libarchive/tar/test/test_option_C_mtree.c | 4 +- .../{test_option_P.c => test_option_P_upper.c} | 0 .../libarchive/tar/test/test_option_ignore_zeros.c | 4 +- contrib/libarchive/tar/test/test_option_mtime.c | 82 + contrib/libarchive/tar/test/test_option_s.c | 14 +- contrib/libarchive/tar/test/test_stdio.c | 48 +- contrib/libarchive/tar/util.c | 57 +- contrib/libarchive/tar/write.c | 4 + contrib/libarchive/test_utils/test_common.h | 2 +- contrib/libarchive/test_utils/test_main.c | 192 +- contrib/libarchive/test_utils/test_utils.c | 48 + contrib/libarchive/test_utils/test_utils.h | 11 +- contrib/libarchive/unzip/bsdunzip.c | 21 +- contrib/libarchive/unzip/la_getline.h | 16 + lib/libarchive/Makefile | 3 +- lib/libarchive/tests/Makefile | 35 +- usr.bin/tar/tests/Makefile | 5 +- 181 files changed, 25587 insertions(+), 2345 deletions(-) diff --git a/contrib/libarchive/COPYING b/contrib/libarchive/COPYING index 1b9723574a7b..9d0bcf81ff61 100644 --- a/contrib/libarchive/COPYING +++ b/contrib/libarchive/COPYING @@ -20,7 +20,7 @@ the actual statements in the files are controlling. libarchive/mtree.5 * The following source files are in the public domain: - libarchive/archive_getdate.c + libarchive/archive_parse_date.c * The following source files are triple-licensed with the ability to choose from CC0 1.0 Universal, OpenSSL or Apache 2.0 licenses: diff --git a/contrib/libarchive/NEWS b/contrib/libarchive/NEWS index 6af50e4e4033..caca7d5cbdb9 100644 --- a/contrib/libarchive/NEWS +++ b/contrib/libarchive/NEWS @@ -1,3 +1,11 @@ +Jun 01, 2026: libarchive 3.8.1 released + +May 20, 2025: libarchive 3.8.0 released + +Mar 30, 2025: libarchive 3.7.9 released + +Mar 20, 2025: libarchive 3.7.8 released + Oct 13, 2024: libarchive 3.7.7 released Sep 23, 2024: libarchive 3.7.6 released diff --git a/contrib/libarchive/README.md b/contrib/libarchive/README.md index 933de6986425..0d63357292ec 100644 --- a/contrib/libarchive/README.md +++ b/contrib/libarchive/README.md @@ -85,13 +85,14 @@ Currently, the library automatically detects and reads the following formats: * PWB binary cpio * ISO9660 CD-ROM images (with optional Rockridge or Joliet extensions) * ZIP archives (with uncompressed or "deflate" compressed entries, including support for encrypted Zip archives) - * ZIPX archives (with support for bzip2, ppmd8, lzma and xz compressed entries) + * ZIPX archives (with support for bzip2, zstd, ppmd8, lzma and xz compressed entries) * GNU and BSD 'ar' archives * 'mtree' format * 7-Zip archives (including archives that use zstandard compression) * Microsoft CAB format * LHA and LZH archives * RAR and RAR 5.0 archives (with some limitations due to RAR's proprietary status) + * WARC archives * XAR archives The library also detects and handles any of the following before evaluating the archive: @@ -120,15 +121,18 @@ The library can create archives in any of the following formats: * PWB binary cpio * shar archives * ZIP archives (with uncompressed or "deflate" compressed entries) + * ZIPX archives (with bzip2, zstd, lzma or xz compressed entries) * GNU and BSD 'ar' archives * 'mtree' format * ISO9660 format - * 7-Zip archives + * 7-Zip archives (including archives that use zstandard compression) + * WARC archives * XAR archives When creating archives, the result can be filtered with any of the following: * uuencode + * base64 * gzip compression * bzip2 compression * compress/LZW compression @@ -241,4 +245,3 @@ questions we are asked about libarchive: appropriate. It has many advantages over other tar formats (including the legacy GNU tar format) and is widely supported by current tar implementations. - diff --git a/contrib/libarchive/build/ci/github_actions/install-macos-dependencies.sh b/contrib/libarchive/build/ci/github_actions/install-macos-dependencies.sh new file mode 100755 index 000000000000..2aa4823fc3d0 --- /dev/null +++ b/contrib/libarchive/build/ci/github_actions/install-macos-dependencies.sh @@ -0,0 +1,19 @@ +#!/bin/sh +set -eux + +# Uncommenting these adds a full minute to the CI time +#brew update > /dev/null +#brew upgrade > /dev/null + +# This does an upgrade if the package is already installed +brew install \ + autoconf \ + automake \ + libtool \ + pkg-config \ + cmake \ + xz \ + lz4 \ + zstd \ + libxml2 \ + openssl diff --git a/contrib/libarchive/cpio/cpio.c b/contrib/libarchive/cpio/cpio.c index 6bc6eb22e967..2bf1bfa2985a 100644 --- a/contrib/libarchive/cpio/cpio.c +++ b/contrib/libarchive/cpio/cpio.c @@ -1206,7 +1206,7 @@ list_item_verbose(struct cpio *cpio, struct archive_entry *entry) else strcpy(date, "invalid mtime"); - fprintf(out, "%s%3d %-8s %-8s %8s %12s %s", + fprintf(out, "%s%3u %-8s %-8s %8s %12s %s", archive_entry_strmode(entry), archive_entry_nlink(entry), uname, gname, size, date, diff --git a/contrib/libarchive/cpio/test/test_format_newc.c b/contrib/libarchive/cpio/test/test_format_newc.c index 884b6c9c4da7..33aa16d07a81 100644 --- a/contrib/libarchive/cpio/test/test_format_newc.c +++ b/contrib/libarchive/cpio/test/test_format_newc.c @@ -189,10 +189,10 @@ DEFINE_TEST(test_format_newc) gid = from_hex(e + 30, 8); /* gid */ assertEqualMem(e + 38, "00000003", 8); /* nlink */ t = from_hex(e + 46, 8); /* mtime */ - failure("t=%#08jx now=%#08jx=%jd", (intmax_t)t, (intmax_t)now, + failure("t=%#08jx now=%#08jx=%jd", (uintmax_t)t, (uintmax_t)now, (intmax_t)now); assert(t <= now); /* File wasn't created in future. */ - failure("t=%#08jx now - 2=%#08jx=%jd", (intmax_t)t, (intmax_t)now - 2, + failure("t=%#08jx now - 2=%#08jx=%jd", (uintmax_t)t, (uintmax_t)now - 2, (intmax_t)now - 2); assert(t >= now - 2); /* File was created w/in last 2 secs. */ failure("newc format stores body only with last appearance of a link\n" @@ -219,7 +219,7 @@ DEFINE_TEST(test_format_newc) assert(is_hex(e, 110)); assertEqualMem(e + 0, "070701", 6); /* Magic */ assert(is_hex(e + 6, 8)); /* ino */ -#if defined(_WIN32) && !defined(CYGWIN) +#if defined(_WIN32) && !defined(__CYGWIN__) /* Mode: Group members bits and others bits do not work. */ assertEqualInt(0xa180, from_hex(e + 14, 8) & 0xffc0); #else @@ -230,7 +230,7 @@ DEFINE_TEST(test_format_newc) assertEqualMem(e + 38, "00000001", 8); /* nlink */ t2 = from_hex(e + 46, 8); /* mtime */ failure("First entry created at t=%#08jx this entry created" - " at t2=%#08jx", (intmax_t)t, (intmax_t)t2); + " at t2=%#08jx", (uintmax_t)t, (uintmax_t)t2); assert(t2 == t || t2 == t + 1); /* Almost same as first entry. */ assertEqualMem(e + 54, "00000005", 8); /* File size */ fs = (uint64_t)from_hex(e + 54, 8); @@ -266,7 +266,7 @@ DEFINE_TEST(test_format_newc) #endif t2 = from_hex(e + 46, 8); /* mtime */ failure("First entry created at t=%#08jx this entry created at" - "t2=%#08jx", (intmax_t)t, (intmax_t)t2); + "t2=%#08jx", (uintmax_t)t, (uintmax_t)t2); assert(t2 == t || t2 == t + 1); /* Almost same as first entry. */ assertEqualMem(e + 54, "00000000", 8); /* File size */ fs = (uint64_t)from_hex(e + 54, 8); @@ -300,7 +300,7 @@ DEFINE_TEST(test_format_newc) assertEqualMem(e + 38, "00000003", 8); /* nlink */ t2 = from_hex(e + 46, 8); /* mtime */ failure("First entry created at t=%#08jx this entry created at" - "t2=%#08jx", (intmax_t)t, (intmax_t)t2); + "t2=%#08jx", (uintmax_t)t, (uintmax_t)t2); assert(t2 == t || t2 == t + 1); /* Almost same as first entry. */ assertEqualInt(10, from_hex(e + 54, 8)); /* File size */ fs = (uint64_t)from_hex(e + 54, 8); diff --git a/contrib/libarchive/cpio/test/test_option_a.c b/contrib/libarchive/cpio/test/test_option_a.c index e6b87948c65a..28e5b73765d7 100644 --- a/contrib/libarchive/cpio/test/test_option_a.c +++ b/contrib/libarchive/cpio/test/test_option_a.c @@ -52,7 +52,7 @@ test_create(void) * #ifdef this section out. Most of the test below is * still valid. */ memset(×, 0, sizeof(times)); -#if defined(_WIN32) && !defined(CYGWIN) +#if defined(_WIN32) && !defined(__CYGWIN__) times.actime = 86400; times.modtime = 86400; #else diff --git a/contrib/libarchive/cpio/test/test_option_c.c b/contrib/libarchive/cpio/test/test_option_c.c index e8748449514b..2414a4658bb1 100644 --- a/contrib/libarchive/cpio/test/test_option_c.c +++ b/contrib/libarchive/cpio/test/test_option_c.c @@ -18,7 +18,7 @@ is_octal(const char *p, size_t l) return (1); } -static long long int +static unsigned long long int from_octal(const char *p, size_t l) { long long int r = 0; @@ -117,7 +117,7 @@ DEFINE_TEST(test_option_c) gid = (int)from_octal(e + 30, 6); assertEqualMem(e + 36, "000001", 6); /* nlink */ failure("file entries should not have rdev set (dev field was 0%o)", - dev); + (unsigned int)dev); assertEqualMem(e + 42, "000000", 6); /* rdev */ t = from_octal(e + 48, 11); /* mtime */ assert(t <= now); /* File wasn't created in future. */ @@ -133,7 +133,7 @@ DEFINE_TEST(test_option_c) assert(is_octal(e, 76)); /* Entire header is octal digits. */ assertEqualMem(e + 0, "070707", 6); /* Magic */ assertEqualInt(dev, from_octal(e + 6, 6)); /* dev */ - assert(ino != from_octal(e + 12, 6)); /* ino */ + assert(ino != (int)from_octal(e + 12, 6)); /* ino */ #if !defined(_WIN32) || defined(__CYGWIN__) /* On Windows, symbolic link and group members bits and * others bits do not work. */ @@ -163,7 +163,7 @@ DEFINE_TEST(test_option_c) assertEqualInt(dev, from_octal(e + 6, 6)); /* Ino must be different from first entry. */ assert(is_octal(e + 12, 6)); /* ino */ - assert(ino != from_octal(e + 12, 6)); + assert(ino != (int)from_octal(e + 12, 6)); #if defined(_WIN32) && !defined(__CYGWIN__) /* Group members bits and others bits do not work. */ assertEqualMem(e + 18, "040777", 6); /* Mode */ diff --git a/contrib/libarchive/libarchive/archive.h b/contrib/libarchive/libarchive/archive.h index 5b65475f61e2..002190a24663 100644 --- a/contrib/libarchive/libarchive/archive.h +++ b/contrib/libarchive/libarchive/archive.h @@ -34,12 +34,15 @@ * assert that ARCHIVE_VERSION_NUMBER >= 2012108. */ /* Note: Compiler will complain if this does not match archive_entry.h! */ -#define ARCHIVE_VERSION_NUMBER 3007007 +#define ARCHIVE_VERSION_NUMBER 3008001 #include <sys/stat.h> #include <stddef.h> /* for wchar_t */ #include <stdio.h> /* For FILE * */ +#if ARCHIVE_VERSION_NUMBER < 4000000 +/* time_t is slated to be removed from public includes in 4.0 */ #include <time.h> /* For time_t */ +#endif /* * Note: archive.h is for use outside of libarchive; the configuration @@ -63,12 +66,15 @@ #define __LA_INT64_T_DEFINED # if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__) typedef __int64 la_int64_t; +typedef unsigned __int64 la_uint64_t; # else # include <unistd.h> /* ssize_t */ # if defined(_SCO_DS) || defined(__osf__) typedef long long la_int64_t; +typedef unsigned long long la_uint64_t; # else typedef int64_t la_int64_t; +typedef uint64_t la_uint64_t; # endif # endif #endif @@ -94,6 +100,22 @@ typedef ssize_t la_ssize_t; # endif #endif +#if ARCHIVE_VERSION_NUMBER < 4000000 +/* Use the platform types for time_t */ +#define __LA_TIME_T time_t +#else +/* Use 64-bits integer types for time_t */ +#define __LA_TIME_T la_int64_t +#endif + +#if ARCHIVE_VERSION_NUMBER < 4000000 +/* Use the platform types for dev_t */ +#define __LA_DEV_T dev_t +#else +/* Use 64-bits integer types for dev_t */ +#define __LA_DEV_T la_int64_t +#endif + /* Large file support for Android */ #if defined(__LIBARCHIVE_BUILD) && defined(__ANDROID__) #include "android_lf.h" @@ -132,7 +154,7 @@ typedef ssize_t la_ssize_t; #define __LA_PRINTF(fmtarg, firstvararg) /* nothing */ #endif -#if defined(__GNUC__) && __GNUC__ >= 3 && __GNUC_MINOR__ >= 1 +#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) # define __LA_DEPRECATED __attribute__((deprecated)) #else # define __LA_DEPRECATED @@ -155,7 +177,7 @@ __LA_DECL int archive_version_number(void); /* * Textual name/version of the library, useful for version displays. */ -#define ARCHIVE_VERSION_ONLY_STRING "3.7.7" +#define ARCHIVE_VERSION_ONLY_STRING "3.8.1" #define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING __LA_DECL const char * archive_version_string(void); @@ -178,6 +200,23 @@ __LA_DECL const char * archive_liblzma_version(void); __LA_DECL const char * archive_bzlib_version(void); __LA_DECL const char * archive_liblz4_version(void); __LA_DECL const char * archive_libzstd_version(void); +__LA_DECL const char * archive_liblzo2_version(void); +__LA_DECL const char * archive_libexpat_version(void); +__LA_DECL const char * archive_libbsdxml_version(void); +__LA_DECL const char * archive_libxml2_version(void); +__LA_DECL const char * archive_mbedtls_version(void); +__LA_DECL const char * archive_nettle_version(void); +__LA_DECL const char * archive_openssl_version(void); +__LA_DECL const char * archive_libmd_version(void); +__LA_DECL const char * archive_commoncrypto_version(void); +__LA_DECL const char * archive_cng_version(void); +__LA_DECL const char * archive_wincrypt_version(void); +__LA_DECL const char * archive_librichacl_version(void); +__LA_DECL const char * archive_libacl_version(void); +__LA_DECL const char * archive_libattr_version(void); +__LA_DECL const char * archive_libiconv_version(void); +__LA_DECL const char * archive_libpcre_version(void); +__LA_DECL const char * archive_libpcre2_version(void); /* Declare our basic types. */ struct archive; @@ -449,6 +488,8 @@ __LA_DECL int archive_read_support_format_by_code(struct archive *, int); __LA_DECL int archive_read_support_format_cab(struct archive *); __LA_DECL int archive_read_support_format_cpio(struct archive *); __LA_DECL int archive_read_support_format_empty(struct archive *); +/* archive_read_support_format_gnutar() is an alias for historical reasons + * of archive_read_support_format_tar(). */ __LA_DECL int archive_read_support_format_gnutar(struct archive *); __LA_DECL int archive_read_support_format_iso9660(struct archive *); __LA_DECL int archive_read_support_format_lha(struct archive *); @@ -828,6 +869,10 @@ __LA_DECL int archive_write_set_format_filter_by_ext(struct archive *a, const ch __LA_DECL int archive_write_set_format_filter_by_ext_def(struct archive *a, const char *filename, const char * def_ext); __LA_DECL int archive_write_zip_set_compression_deflate(struct archive *); __LA_DECL int archive_write_zip_set_compression_store(struct archive *); +__LA_DECL int archive_write_zip_set_compression_lzma(struct archive *); +__LA_DECL int archive_write_zip_set_compression_xz(struct archive *); +__LA_DECL int archive_write_zip_set_compression_bzip2(struct archive *); +__LA_DECL int archive_write_zip_set_compression_zstd(struct archive *); /* Deprecated; use archive_write_open2 instead */ __LA_DECL int archive_write_open(struct archive *, void *, archive_open_callback *, archive_write_callback *, @@ -1083,6 +1128,10 @@ __LA_DECL int archive_compression(struct archive *) __LA_DEPRECATED; #endif +/* Parses a date string relative to the current time. + * NOTE: This is not intended for general date parsing, and the resulting timestamp should only be used for libarchive. */ +__LA_DECL time_t archive_parse_date(time_t now, const char *datestr); + __LA_DECL int archive_errno(struct archive *); __LA_DECL const char *archive_error_string(struct archive *); __LA_DECL const char *archive_format_name(struct archive *); @@ -1201,8 +1250,10 @@ __LA_DECL int archive_match_include_gname_w(struct archive *, const wchar_t *); /* Utility functions */ +#if ARCHIVE_VERSION_NUMBER < 4000000 /* Convenience function to sort a NULL terminated list of strings */ __LA_DECL int archive_utility_string_sort(char **); +#endif #ifdef __cplusplus } diff --git a/contrib/libarchive/libarchive/archive_acl.c b/contrib/libarchive/libarchive/archive_acl.c index bbb085afe7af..9e71f5ee5610 100644 --- a/contrib/libarchive/libarchive/archive_acl.c +++ b/contrib/libarchive/libarchive/archive_acl.c @@ -1185,8 +1185,13 @@ archive_acl_from_text_w(struct archive_acl *acl, const wchar_t *text, /* Set remaining fields to blank. */ for (n = fields; n < numfields; ++n) field[n].start = field[n].end = NULL; + + if (field[0].start == NULL || field[0].end == NULL) { + /* This should never happen */ + return (ARCHIVE_FATAL); + } - if (field[0].start != NULL && *(field[0].start) == L'#') { + if (*(field[0].start) == L'#') { /* Comment, skip entry */ continue; } @@ -1676,7 +1681,12 @@ archive_acl_from_text_nl(struct archive_acl *acl, const char *text, for (n = fields; n < numfields; ++n) field[n].start = field[n].end = NULL; - if (field[0].start != NULL && *(field[0].start) == '#') { + if (field[0].start == NULL || field[0].end == NULL) { + /* This should never happen */ + return (ARCHIVE_FATAL); + } + + if (*(field[0].start) == '#') { /* Comment, skip entry */ continue; } diff --git a/contrib/libarchive/libarchive/archive_acl_private.h b/contrib/libarchive/libarchive/archive_acl_private.h index 2c9b5053430e..54e4439692ed 100644 --- a/contrib/libarchive/libarchive/archive_acl_private.h +++ b/contrib/libarchive/libarchive/archive_acl_private.h @@ -80,4 +80,4 @@ int archive_acl_from_text_l(struct archive_acl *, const char * /* text */, int archive_acl_from_text_nl(struct archive_acl *, const char * /* text */, size_t /* size of text */, int /* type */, struct archive_string_conv *); -#endif /* ARCHIVE_ENTRY_PRIVATE_H_INCLUDED */ +#endif /* !ARCHIVE_ACL_PRIVATE_H_INCLUDED */ diff --git a/contrib/libarchive/libarchive/archive_cmdline.c b/contrib/libarchive/libarchive/archive_cmdline.c index 2e5428cae516..23bb05d6424a 100644 --- a/contrib/libarchive/libarchive/archive_cmdline.c +++ b/contrib/libarchive/libarchive/archive_cmdline.c @@ -71,7 +71,7 @@ get_argument(struct archive_string *as, const char *p) archive_string_empty(as); /* Skip beginning space characters. */ - while (*s != '\0' && *s == ' ') + while (*s == ' ') s++; /* Copy non-space characters. */ while (*s != '\0' && *s != ' ') { diff --git a/contrib/libarchive/libarchive/archive_cryptor_private.h b/contrib/libarchive/libarchive/archive_cryptor_private.h index c13f29260a07..4b3c6c161433 100644 --- a/contrib/libarchive/libarchive/archive_cryptor_private.h +++ b/contrib/libarchive/libarchive/archive_cryptor_private.h @@ -64,6 +64,7 @@ typedef struct { #elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA #include <bcrypt.h> +#define ARCHIVE_CRYPTOR_USE_CNG 1 /* Common in other bcrypt implementations, but missing from VS2008. */ #ifndef BCRYPT_SUCCESS @@ -86,6 +87,7 @@ typedef struct { #include <mbedtls/aes.h> #include <mbedtls/md.h> #include <mbedtls/pkcs5.h> +#define ARCHIVE_CRYPTOR_USE_MBED 1 #define AES_MAX_KEY_SIZE 32 #define AES_BLOCK_SIZE 16 @@ -105,6 +107,7 @@ typedef struct { #endif #include <nettle/aes.h> #include <nettle/version.h> +#define ARCHIVE_CRYPTOR_USE_NETTLE 1 typedef struct { #if NETTLE_VERSION_MAJOR < 3 @@ -125,6 +128,7 @@ typedef struct { #elif defined(HAVE_LIBCRYPTO) #include "archive_openssl_evp_private.h" +#define ARCHIVE_CRYPTOR_USE_OPENSSL 1 #define AES_BLOCK_SIZE 16 #define AES_MAX_KEY_SIZE 32 @@ -140,6 +144,10 @@ typedef struct { #else +#if defined(_WIN32) && !defined(__CYGWIN__) && !(defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA) +#define ARCHIVE_CRYPTOR_USE_WINCRYPT 1 +#endif + #define AES_BLOCK_SIZE 16 #define AES_MAX_KEY_SIZE 32 typedef int archive_crypto_ctx; diff --git a/contrib/libarchive/libarchive/archive_digest.c b/contrib/libarchive/libarchive/archive_digest.c index 3776831b21c9..45fc36af1145 100644 --- a/contrib/libarchive/libarchive/archive_digest.c +++ b/contrib/libarchive/libarchive/archive_digest.c @@ -196,6 +196,13 @@ __archive_md5final(archive_md5_ctx *ctx, void *md) #elif defined(ARCHIVE_CRYPTO_MD5_LIBSYSTEM) +// These functions are available in macOS 10.4 and later, but deprecated from 10.15 onwards. +// We need to continue supporting this feature regardless, so suppress the warnings. +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +#endif + static int __archive_md5init(archive_md5_ctx *ctx) { @@ -218,13 +225,46 @@ __archive_md5final(archive_md5_ctx *ctx, void *md) return (ARCHIVE_OK); } +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + +#elif defined(ARCHIVE_CRYPTO_MD5_WIN) + +static int +__archive_md5init(archive_md5_ctx *ctx) +{ +#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA + return (win_crypto_init(ctx, BCRYPT_MD5_ALGORITHM)); +#else + return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_MD5)); +#endif +} + +static int +__archive_md5update(archive_md5_ctx *ctx, const void *indata, + size_t insize) +{ + return (win_crypto_Update(ctx, indata, insize)); +} + +static int +__archive_md5final(archive_md5_ctx *ctx, void *md) +{ + return (win_crypto_Final(md, 16, ctx)); +} + #elif defined(ARCHIVE_CRYPTO_MD5_MBEDTLS) static int __archive_md5init(archive_md5_ctx *ctx) { mbedtls_md5_init(ctx); +#if MBEDTLS_VERSION_NUMBER > 0x03000000 + if (mbedtls_md5_starts(ctx) == 0) +#else if (mbedtls_md5_starts_ret(ctx) == 0) +#endif return (ARCHIVE_OK); else return (ARCHIVE_FATAL); @@ -234,7 +274,11 @@ static int __archive_md5update(archive_md5_ctx *ctx, const void *indata, size_t insize) { +#if MBEDTLS_VERSION_NUMBER > 0x03000000 + if (mbedtls_md5_update(ctx, indata, insize) == 0) +#else if (mbedtls_md5_update_ret(ctx, indata, insize) == 0) +#endif return (ARCHIVE_OK); else return (ARCHIVE_FATAL); @@ -243,7 +287,11 @@ __archive_md5update(archive_md5_ctx *ctx, const void *indata, static int __archive_md5final(archive_md5_ctx *ctx, void *md) { +#if MBEDTLS_VERSION_NUMBER > 0x03000000 + if (mbedtls_md5_finish(ctx, md) == 0) { +#else if (mbedtls_md5_finish_ret(ctx, md) == 0) { +#endif mbedtls_md5_free(ctx); return (ARCHIVE_OK); } else { @@ -311,31 +359,6 @@ __archive_md5final(archive_md5_ctx *ctx, void *md) return (ARCHIVE_OK); } -#elif defined(ARCHIVE_CRYPTO_MD5_WIN) - -static int -__archive_md5init(archive_md5_ctx *ctx) -{ -#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA - return (win_crypto_init(ctx, BCRYPT_MD5_ALGORITHM)); -#else - return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_MD5)); -#endif -} - -static int -__archive_md5update(archive_md5_ctx *ctx, const void *indata, - size_t insize) -{ - return (win_crypto_Update(ctx, indata, insize)); -} - -static int -__archive_md5final(archive_md5_ctx *ctx, void *md) -{ - return (win_crypto_Final(md, 16, ctx)); -} - #else static int @@ -420,7 +443,11 @@ static int __archive_ripemd160init(archive_rmd160_ctx *ctx) { mbedtls_ripemd160_init(ctx); +#if MBEDTLS_VERSION_NUMBER > 0x03000000 + if (mbedtls_ripemd160_starts(ctx) == 0) +#else if (mbedtls_ripemd160_starts_ret(ctx) == 0) +#endif return (ARCHIVE_OK); else return (ARCHIVE_FATAL); @@ -430,7 +457,11 @@ static int __archive_ripemd160update(archive_rmd160_ctx *ctx, const void *indata, size_t insize) { +#if MBEDTLS_VERSION_NUMBER > 0x03000000 + if (mbedtls_ripemd160_update(ctx, indata, insize) == 0) +#else if (mbedtls_ripemd160_update_ret(ctx, indata, insize) == 0) +#endif return (ARCHIVE_OK); else return (ARCHIVE_FATAL); @@ -439,7 +470,11 @@ __archive_ripemd160update(archive_rmd160_ctx *ctx, const void *indata, static int __archive_ripemd160final(archive_rmd160_ctx *ctx, void *md) { +#if MBEDTLS_VERSION_NUMBER > 0x03000000 + if (mbedtls_ripemd160_finish(ctx, md) == 0) { +#else if (mbedtls_ripemd160_finish_ret(ctx, md) == 0) { +#endif mbedtls_ripemd160_free(ctx); return (ARCHIVE_OK); } else { @@ -605,13 +640,42 @@ __archive_sha1final(archive_sha1_ctx *ctx, void *md) return (ARCHIVE_OK); } +#elif defined(ARCHIVE_CRYPTO_SHA1_WIN) + +static int +__archive_sha1init(archive_sha1_ctx *ctx) +{ +#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA + return (win_crypto_init(ctx, BCRYPT_SHA1_ALGORITHM)); +#else + return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_SHA1)); +#endif +} + +static int +__archive_sha1update(archive_sha1_ctx *ctx, const void *indata, + size_t insize) +{ + return (win_crypto_Update(ctx, indata, insize)); +} + +static int +__archive_sha1final(archive_sha1_ctx *ctx, void *md) +{ + return (win_crypto_Final(md, 20, ctx)); +} + #elif defined(ARCHIVE_CRYPTO_SHA1_MBEDTLS) static int __archive_sha1init(archive_sha1_ctx *ctx) { mbedtls_sha1_init(ctx); +#if MBEDTLS_VERSION_NUMBER > 0x03000000 + if (mbedtls_sha1_starts(ctx) == 0) +#else if (mbedtls_sha1_starts_ret(ctx) == 0) +#endif return (ARCHIVE_OK); else return (ARCHIVE_FATAL); @@ -621,7 +685,11 @@ static int __archive_sha1update(archive_sha1_ctx *ctx, const void *indata, size_t insize) { +#if MBEDTLS_VERSION_NUMBER > 0x03000000 + if (mbedtls_sha1_update(ctx, indata, insize) == 0) +#else if (mbedtls_sha1_update_ret(ctx, indata, insize) == 0) +#endif return (ARCHIVE_OK); else return (ARCHIVE_FATAL); @@ -630,7 +698,11 @@ __archive_sha1update(archive_sha1_ctx *ctx, const void *indata, static int __archive_sha1final(archive_sha1_ctx *ctx, void *md) { +#if MBEDTLS_VERSION_NUMBER > 0x03000000 + if (mbedtls_sha1_finish(ctx, md) == 0) { +#else if (mbedtls_sha1_finish_ret(ctx, md) == 0) { +#endif mbedtls_sha1_free(ctx); return (ARCHIVE_OK); } else { @@ -698,31 +770,6 @@ __archive_sha1final(archive_sha1_ctx *ctx, void *md) return (ARCHIVE_OK); } -#elif defined(ARCHIVE_CRYPTO_SHA1_WIN) - -static int -__archive_sha1init(archive_sha1_ctx *ctx) -{ -#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA - return (win_crypto_init(ctx, BCRYPT_SHA1_ALGORITHM)); -#else - return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_SHA1)); -#endif -} - -static int -__archive_sha1update(archive_sha1_ctx *ctx, const void *indata, - size_t insize) -{ - return (win_crypto_Update(ctx, indata, insize)); -} - -static int -__archive_sha1final(archive_sha1_ctx *ctx, void *md) -{ - return (win_crypto_Final(md, 20, ctx)); -} - #else static int @@ -873,13 +920,42 @@ __archive_sha256final(archive_sha256_ctx *ctx, void *md) return (ARCHIVE_OK); } +#elif defined(ARCHIVE_CRYPTO_SHA256_WIN) + +static int +__archive_sha256init(archive_sha256_ctx *ctx) +{ +#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA + return (win_crypto_init(ctx, BCRYPT_SHA256_ALGORITHM)); +#else + return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_256)); +#endif +} + +static int +__archive_sha256update(archive_sha256_ctx *ctx, const void *indata, + size_t insize) +{ + return (win_crypto_Update(ctx, indata, insize)); +} *** 35191 LINES SKIPPED ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202506202043.55KKhWot031198>