pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/archivers/libarchive



Module Name:    pkgsrc
Committed By:   adam
Date:           Sun Nov  2 08:52:16 UTC 2025

Modified Files:
        pkgsrc/archivers/libarchive: Makefile Makefile.common
        pkgsrc/archivers/libarchive/files: CMakeLists.txt Makefile.am
            Makefile.in NEWS config.h.in configure configure.ac
        pkgsrc/archivers/libarchive/files/build: version
        pkgsrc/archivers/libarchive/files/build/cmake: config.h.in
        pkgsrc/archivers/libarchive/files/cat: bsdcat.c
        pkgsrc/archivers/libarchive/files/contrib/android: Android.mk
        pkgsrc/archivers/libarchive/files/cpio: CMakeLists.txt cmdline.c cpio.c
            cpio_windows.c
        pkgsrc/archivers/libarchive/files/cpio/test: CMakeLists.txt
            test_owner_parse.c
        pkgsrc/archivers/libarchive/files/doc/html: archive_entry.3.html
            archive_entry_acl.3.html archive_entry_linkify.3.html
            archive_entry_misc.3.html archive_entry_paths.3.html
            archive_entry_perms.3.html archive_entry_stat.3.html
            archive_entry_time.3.html archive_read.3.html
            archive_read_add_passphrase.3.html archive_read_data.3.html
            archive_read_disk.3.html archive_read_extract.3.html
            archive_read_filter.3.html archive_read_format.3.html
            archive_read_free.3.html archive_read_header.3.html
            archive_read_new.3.html archive_read_open.3.html
            archive_read_set_options.3.html archive_util.3.html
            archive_write.3.html archive_write_blocksize.3.html
            archive_write_data.3.html archive_write_disk.3.html
            archive_write_filter.3.html archive_write_finish_entry.3.html
            archive_write_format.3.html archive_write_free.3.html
            archive_write_header.3.html archive_write_new.3.html
            archive_write_open.3.html archive_write_set_options.3.html
            archive_write_set_passphrase.3.html bsdcpio.1.html bsdtar.1.html
            cpio.5.html libarchive-formats.5.html libarchive.3.html
            libarchive_changes.3.html libarchive_internals.3.html mtree.5.html
            tar.5.html
        pkgsrc/archivers/libarchive/files/doc/man: archive_entry_paths.3
        pkgsrc/archivers/libarchive/files/doc/pdf: archive_entry.3.pdf
            archive_entry_acl.3.pdf archive_entry_linkify.3.pdf
            archive_entry_misc.3.pdf archive_entry_paths.3.pdf
            archive_entry_perms.3.pdf archive_entry_stat.3.pdf
            archive_entry_time.3.pdf archive_read.3.pdf
            archive_read_add_passphrase.3.pdf archive_read_data.3.pdf
            archive_read_disk.3.pdf archive_read_extract.3.pdf
            archive_read_filter.3.pdf archive_read_format.3.pdf
            archive_read_free.3.pdf archive_read_header.3.pdf
            archive_read_new.3.pdf archive_read_open.3.pdf
            archive_read_set_options.3.pdf archive_util.3.pdf
            archive_write.3.pdf archive_write_blocksize.3.pdf
            archive_write_data.3.pdf archive_write_disk.3.pdf
            archive_write_filter.3.pdf archive_write_finish_entry.3.pdf
            archive_write_format.3.pdf archive_write_free.3.pdf
            archive_write_header.3.pdf archive_write_new.3.pdf
            archive_write_open.3.pdf archive_write_set_options.3.pdf
            archive_write_set_passphrase.3.pdf bsdcpio.1.pdf bsdtar.1.pdf
            cpio.5.pdf libarchive-formats.5.pdf libarchive.3.pdf
            libarchive_changes.3.pdf libarchive_internals.3.pdf mtree.5.pdf
            tar.5.pdf
        pkgsrc/archivers/libarchive/files/doc/text: archive_entry_paths.3.txt
        pkgsrc/archivers/libarchive/files/doc/wiki:
            ManPageArchiveEntryPaths3.wiki
        pkgsrc/archivers/libarchive/files/libarchive: CMakeLists.txt archive.h
            archive_acl.c archive_check_magic.c archive_cryptor.c
            archive_cryptor_private.h archive_entry.h archive_entry_paths.3
            archive_entry_stat.c archive_platform.h archive_private.h
            archive_read.c archive_read_disk_entry_from_file.c
            archive_read_disk_posix.c archive_read_open_fd.c
            archive_read_open_file.c archive_read_open_filename.c
            archive_read_set_format.c archive_read_support_filter_program.c
            archive_read_support_format_7zip.c
            archive_read_support_format_mtree.c
            archive_read_support_format_rar.c
            archive_read_support_format_rar5.c
            archive_read_support_format_tar.c
            archive_read_support_format_warc.c
            archive_read_support_format_xar.c archive_read_support_format_zip.c
            archive_string.c archive_string_sprintf.c archive_util.c
            archive_windows.c archive_windows.h archive_write.c
            archive_write_add_filter_bzip2.c archive_write_add_filter_gzip.c
            archive_write_add_filter_program.c archive_write_add_filter_zstd.c
            archive_write_disk_posix.c archive_write_disk_windows.c
            archive_write_open_fd.c archive_write_open_file.c
            archive_write_open_filename.c archive_write_set_format_7zip.c
            archive_write_set_format_mtree.c archive_write_set_format_xar.c
            archive_write_set_format_zip.c filter_fork_posix.c
        pkgsrc/archivers/libarchive/files/libarchive/test: CMakeLists.txt
            list.h test_acl_nfs4.c test_acl_posix1e.c
            test_archive_string_conversion.c test_entry.c
            test_read_format_7zip.c test_read_format_rar5.c
            test_read_set_format.c test_write_filter_bzip2.c
            test_write_filter_gzip.c test_write_filter_gzip_timestamp.c
        pkgsrc/archivers/libarchive/files/libarchive_fe: line_reader.c
            passphrase.c
        pkgsrc/archivers/libarchive/files/tar: CMakeLists.txt bsdtar.c bsdtar.h
            bsdtar_windows.c bsdtar_windows.h cmdline.c creation_set.c read.c
            subst.c util.c write.c
        pkgsrc/archivers/libarchive/files/tar/test: CMakeLists.txt list.h
        pkgsrc/archivers/libarchive/files/test_utils: test_common.h test_main.c
        pkgsrc/archivers/libarchive/files/unzip: bsdunzip.c
Removed Files:
        pkgsrc/archivers/libarchive/files/libarchive_fe: err.c err.h

Log Message:
libarchive: updated to 3.8.2

Libarchive 3.8.2 is a bugfix and security release.

Security fixes:

7zip: Fix out of boundary access
tar reader: fix checking the result of the strftime

Notable bugfixes:

bsdtar: Allow filename to have CRLF endings
lib: archive_read_data: handle sparse holes at end of file correctly
lib: improve filter process handling
lib: fix error checking in writing files
lib: handle possible errors from system calls
lib: avoid leaking file descriptors into subprocesses
lib: parse_date: handle dates in 2038 and beyond if time_t is big enough
RAR5 reader: fix multiple issues in extra field parsing function
RAR5 reader: early fail when file declares data for a dir entry
tar writer: fix replacing a regular file with a dir for ARCHIVE_EXTRACT_SAFE_WRITES
tar reader (Windows): check WCS pathname in header_gnutar before overwriting
tar reader: fix an infinite loop when parsing V headers
zip writer: fix a memory leak if write callback error early
zip writer: fix writing with ZSTD compression
zstd write filter: enable Zstandard's checksum feature


To generate a diff of this commit:
cvs rdiff -u -r1.58 -r1.59 pkgsrc/archivers/libarchive/Makefile
cvs rdiff -u -r1.22 -r1.23 pkgsrc/archivers/libarchive/Makefile.common
cvs rdiff -u -r1.17 -r1.18 pkgsrc/archivers/libarchive/files/CMakeLists.txt
cvs rdiff -u -r1.20 -r1.21 pkgsrc/archivers/libarchive/files/Makefile.am
cvs rdiff -u -r1.22 -r1.23 pkgsrc/archivers/libarchive/files/Makefile.in
cvs rdiff -u -r1.21 -r1.22 pkgsrc/archivers/libarchive/files/NEWS \
    pkgsrc/archivers/libarchive/files/config.h.in
cvs rdiff -u -r1.30 -r1.31 pkgsrc/archivers/libarchive/files/configure
cvs rdiff -u -r1.29 -r1.30 pkgsrc/archivers/libarchive/files/configure.ac
cvs rdiff -u -r1.16 -r1.17 pkgsrc/archivers/libarchive/files/build/version
cvs rdiff -u -r1.15 -r1.16 \
    pkgsrc/archivers/libarchive/files/build/cmake/config.h.in
cvs rdiff -u -r1.4 -r1.5 pkgsrc/archivers/libarchive/files/cat/bsdcat.c
cvs rdiff -u -r1.4 -r1.5 \
    pkgsrc/archivers/libarchive/files/contrib/android/Android.mk
cvs rdiff -u -r1.5 -r1.6 \
    pkgsrc/archivers/libarchive/files/cpio/CMakeLists.txt
cvs rdiff -u -r1.12 -r1.13 pkgsrc/archivers/libarchive/files/cpio/cmdline.c
cvs rdiff -u -r1.15 -r1.16 pkgsrc/archivers/libarchive/files/cpio/cpio.c
cvs rdiff -u -r1.6 -r1.7 \
    pkgsrc/archivers/libarchive/files/cpio/cpio_windows.c
cvs rdiff -u -r1.9 -r1.10 \
    pkgsrc/archivers/libarchive/files/cpio/test/CMakeLists.txt \
    pkgsrc/archivers/libarchive/files/cpio/test/test_owner_parse.c
cvs rdiff -u -r1.16 -r1.17 \
    pkgsrc/archivers/libarchive/files/doc/html/archive_entry.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_read.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_read_disk.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_util.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_write.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_write_disk.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/bsdcpio.1.html \
    pkgsrc/archivers/libarchive/files/doc/html/bsdtar.1.html \
    pkgsrc/archivers/libarchive/files/doc/html/cpio.5.html \
    pkgsrc/archivers/libarchive/files/doc/html/libarchive-formats.5.html \
    pkgsrc/archivers/libarchive/files/doc/html/libarchive.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/libarchive_internals.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/mtree.5.html \
    pkgsrc/archivers/libarchive/files/doc/html/tar.5.html
cvs rdiff -u -r1.15 -r1.16 \
    pkgsrc/archivers/libarchive/files/doc/html/archive_entry_acl.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_entry_linkify.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_entry_paths.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_entry_perms.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_entry_stat.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_entry_time.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_read_data.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_read_extract.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_read_filter.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_read_format.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_read_free.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_read_header.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_read_new.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_read_open.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_read_set_options.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_write_blocksize.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_write_data.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_write_filter.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_write_finish_entry.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_write_format.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_write_free.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_write_header.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_write_new.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_write_open.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_write_set_options.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/libarchive_changes.3.html
cvs rdiff -u -r1.10 -r1.11 \
    pkgsrc/archivers/libarchive/files/doc/html/archive_entry_misc.3.html
cvs rdiff -u -r1.12 -r1.13 \
    pkgsrc/archivers/libarchive/files/doc/html/archive_read_add_passphrase.3.html \
    pkgsrc/archivers/libarchive/files/doc/html/archive_write_set_passphrase.3.html
cvs rdiff -u -r1.4 -r1.5 \
    pkgsrc/archivers/libarchive/files/doc/man/archive_entry_paths.3
cvs rdiff -u -r1.16 -r1.17 \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_read.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_disk.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_util.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_write.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_disk.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/bsdcpio.1.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/bsdtar.1.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/cpio.5.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/libarchive-formats.5.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/libarchive.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/libarchive_internals.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/mtree.5.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/tar.5.pdf
cvs rdiff -u -r1.15 -r1.16 \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_acl.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_linkify.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_paths.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_perms.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_stat.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_time.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_data.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_extract.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_filter.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_format.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_free.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_header.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_new.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_open.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_set_options.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_blocksize.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_data.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_filter.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_finish_entry.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_format.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_free.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_header.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_new.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_open.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_set_options.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/libarchive_changes.3.pdf
cvs rdiff -u -r1.10 -r1.11 \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_misc.3.pdf
cvs rdiff -u -r1.12 -r1.13 \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_add_passphrase.3.pdf \
    pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_set_passphrase.3.pdf
cvs rdiff -u -r1.7 -r1.8 \
    pkgsrc/archivers/libarchive/files/doc/text/archive_entry_paths.3.txt
cvs rdiff -u -r1.7 -r1.8 \
    pkgsrc/archivers/libarchive/files/doc/wiki/ManPageArchiveEntryPaths3.wiki
cvs rdiff -u -r1.13 -r1.14 \
    pkgsrc/archivers/libarchive/files/libarchive/CMakeLists.txt \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_7zip.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write.c
cvs rdiff -u -r1.22 -r1.23 \
    pkgsrc/archivers/libarchive/files/libarchive/archive.h
cvs rdiff -u -r1.9 -r1.10 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_acl.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_fd.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_filename.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_xar.c
cvs rdiff -u -r1.7 -r1.8 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_check_magic.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_cryptor.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_cryptor_private.h \
    pkgsrc/archivers/libarchive/files/libarchive/archive_string_sprintf.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_bzip2.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_gzip.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_fd.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_file.c
cvs rdiff -u -r1.18 -r1.19 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_entry.h \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_disk_entry_from_file.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_tar.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_zip.c
cvs rdiff -u -r1.4 -r1.5 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_entry_paths.3 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_set_format.c \
    pkgsrc/archivers/libarchive/files/libarchive/filter_fork_posix.c
cvs rdiff -u -r1.5 -r1.6 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_entry_stat.c
cvs rdiff -u -r1.16 -r1.17 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_platform.h \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_mtree.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_util.c
cvs rdiff -u -r1.10 -r1.11 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_private.h \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_warc.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_7zip.c
cvs rdiff -u -r1.12 -r1.13 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_disk_posix.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_file.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_filename.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_windows.h \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write_disk_windows.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_zip.c
cvs rdiff -u -r1.6 -r1.7 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_filter_program.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_program.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_zstd.c
cvs rdiff -u -r1.14 -r1.15 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_rar.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_xar.c
cvs rdiff -u -r1.8 -r1.9 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_rar5.c
cvs rdiff -u -r1.15 -r1.16 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_string.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write_disk_posix.c
cvs rdiff -u -r1.11 -r1.12 \
    pkgsrc/archivers/libarchive/files/libarchive/archive_windows.c \
    pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_mtree.c
cvs rdiff -u -r1.16 -r1.17 \
    pkgsrc/archivers/libarchive/files/libarchive/test/CMakeLists.txt
cvs rdiff -u -r1.18 -r1.19 \
    pkgsrc/archivers/libarchive/files/libarchive/test/list.h
cvs rdiff -u -r1.3 -r1.4 \
    pkgsrc/archivers/libarchive/files/libarchive/test/test_acl_nfs4.c \
    pkgsrc/archivers/libarchive/files/libarchive/test/test_read_set_format.c \
    pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_gzip_timestamp.c
cvs rdiff -u -r1.4 -r1.5 \
    pkgsrc/archivers/libarchive/files/libarchive/test/test_acl_posix1e.c \
    pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_bzip2.c
cvs rdiff -u -r1.6 -r1.7 \
    pkgsrc/archivers/libarchive/files/libarchive/test/test_archive_string_conversion.c \
    pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_gzip.c
cvs rdiff -u -r1.10 -r1.11 \
    pkgsrc/archivers/libarchive/files/libarchive/test/test_entry.c
cvs rdiff -u -r1.9 -r1.10 \
    pkgsrc/archivers/libarchive/files/libarchive/test/test_read_format_7zip.c
cvs rdiff -u -r1.8 -r1.9 \
    pkgsrc/archivers/libarchive/files/libarchive/test/test_read_format_rar5.c
cvs rdiff -u -r1.4 -r0 pkgsrc/archivers/libarchive/files/libarchive_fe/err.c
cvs rdiff -u -r1.5 -r0 pkgsrc/archivers/libarchive/files/libarchive_fe/err.h
cvs rdiff -u -r1.4 -r1.5 \
    pkgsrc/archivers/libarchive/files/libarchive_fe/line_reader.c
cvs rdiff -u -r1.9 -r1.10 \
    pkgsrc/archivers/libarchive/files/libarchive_fe/passphrase.c
cvs rdiff -u -r1.5 -r1.6 pkgsrc/archivers/libarchive/files/tar/CMakeLists.txt
cvs rdiff -u -r1.17 -r1.18 pkgsrc/archivers/libarchive/files/tar/bsdtar.c
cvs rdiff -u -r1.14 -r1.15 pkgsrc/archivers/libarchive/files/tar/bsdtar.h
cvs rdiff -u -r1.4 -r1.5 \
    pkgsrc/archivers/libarchive/files/tar/bsdtar_windows.c
cvs rdiff -u -r1.6 -r1.7 \
    pkgsrc/archivers/libarchive/files/tar/bsdtar_windows.h
cvs rdiff -u -r1.12 -r1.13 pkgsrc/archivers/libarchive/files/tar/cmdline.c
cvs rdiff -u -r1.7 -r1.8 pkgsrc/archivers/libarchive/files/tar/creation_set.c
cvs rdiff -u -r1.9 -r1.10 pkgsrc/archivers/libarchive/files/tar/read.c
cvs rdiff -u -r1.10 -r1.11 pkgsrc/archivers/libarchive/files/tar/subst.c
cvs rdiff -u -r1.13 -r1.14 pkgsrc/archivers/libarchive/files/tar/util.c
cvs rdiff -u -r1.16 -r1.17 pkgsrc/archivers/libarchive/files/tar/write.c
cvs rdiff -u -r1.13 -r1.14 \
    pkgsrc/archivers/libarchive/files/tar/test/CMakeLists.txt
cvs rdiff -u -r1.12 -r1.13 pkgsrc/archivers/libarchive/files/tar/test/list.h
cvs rdiff -u -r1.12 -r1.13 \
    pkgsrc/archivers/libarchive/files/test_utils/test_common.h
cvs rdiff -u -r1.11 -r1.12 \
    pkgsrc/archivers/libarchive/files/test_utils/test_main.c
cvs rdiff -u -r1.8 -r1.9 pkgsrc/archivers/libarchive/files/unzip/bsdunzip.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/archivers/libarchive/Makefile
diff -u pkgsrc/archivers/libarchive/Makefile:1.58 pkgsrc/archivers/libarchive/Makefile:1.59
--- pkgsrc/archivers/libarchive/Makefile:1.58   Sat Oct 11 20:43:36 2025
+++ pkgsrc/archivers/libarchive/Makefile        Sun Nov  2 08:52:11 2025
@@ -1,8 +1,7 @@
-# $NetBSD: Makefile,v 1.58 2025/10/11 20:43:36 wiz Exp $
+# $NetBSD: Makefile,v 1.59 2025/11/02 08:52:11 adam Exp $
 
 .include "Makefile.common"
 
-PKGREVISION=   1
 COMMENT=       Library to read/create different archive formats
 
 USE_LIBTOOL=           yes

Index: pkgsrc/archivers/libarchive/Makefile.common
diff -u pkgsrc/archivers/libarchive/Makefile.common:1.22 pkgsrc/archivers/libarchive/Makefile.common:1.23
--- pkgsrc/archivers/libarchive/Makefile.common:1.22    Tue Jul  1 15:14:42 2025
+++ pkgsrc/archivers/libarchive/Makefile.common Sun Nov  2 08:52:11 2025
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile.common,v 1.22 2025/07/01 15:14:42 adam Exp $
+# $NetBSD: Makefile.common,v 1.23 2025/11/02 08:52:11 adam Exp $
 # used by archivers/bsdtar/Makefile
 # used by archivers/libarchive/Makefile
 
-DISTNAME=      libarchive-3.8.1
+DISTNAME=      libarchive-3.8.2
 CATEGORIES=    archivers
 MASTER_SITES=  https://www.libarchive.org/downloads/
 DISTFILES=     # empty

Index: pkgsrc/archivers/libarchive/files/CMakeLists.txt
diff -u pkgsrc/archivers/libarchive/files/CMakeLists.txt:1.17 pkgsrc/archivers/libarchive/files/CMakeLists.txt:1.18
--- pkgsrc/archivers/libarchive/files/CMakeLists.txt:1.17       Tue Jul  1 15:14:42 2025
+++ pkgsrc/archivers/libarchive/files/CMakeLists.txt    Sun Nov  2 08:52:11 2025
@@ -3,6 +3,9 @@ cmake_minimum_required(VERSION 3.17 FATA
 
 PROJECT(libarchive C)
 #
+# Include standard installation directories
+include(GNUInstallDirs)
+#
 SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build/cmake")
 if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY)
   set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${libarchive_BINARY_DIR}/bin)
@@ -255,6 +258,10 @@ OPTION(ENABLE_TEST "Enable unit and regr
 OPTION(ENABLE_COVERAGE "Enable code coverage (GCC only, automatically sets ENABLE_TEST to ON)" FALSE)
 OPTION(ENABLE_INSTALL "Enable installing of libraries" ON)
 
+IF(WIN32 AND MSVC)
+  OPTION(MSVC_USE_STATIC_CRT "Use static CRT" OFF)
+ENDIF()
+
 SET(POSIX_REGEX_LIB "AUTO" CACHE STRING "Choose what library should provide POSIX regular expression support")
 SET(ENABLE_SAFESEH "AUTO" CACHE STRING "Enable use of /SAFESEH linker flag (MSVC only)")
 SET(WINDOWS_VERSION "WIN10" CACHE STRING "Set Windows version to use (Windows only)")
@@ -1472,6 +1479,8 @@ CHECK_FUNCTION_EXISTS_GLIBC(arc4random_b
 CHECK_FUNCTION_EXISTS_GLIBC(chflags HAVE_CHFLAGS)
 CHECK_FUNCTION_EXISTS_GLIBC(chown HAVE_CHOWN)
 CHECK_FUNCTION_EXISTS_GLIBC(chroot HAVE_CHROOT)
+CHECK_FUNCTION_EXISTS_GLIBC(closefrom HAVE_CLOSEFROM)
+CHECK_FUNCTION_EXISTS_GLIBC(close_range HAVE_CLOSE_RANGE)
 CHECK_FUNCTION_EXISTS_GLIBC(ctime_r HAVE_CTIME_R)
 CHECK_FUNCTION_EXISTS_GLIBC(fchdir HAVE_FCHDIR)
 CHECK_FUNCTION_EXISTS_GLIBC(fchflags HAVE_FCHFLAGS)
@@ -1489,15 +1498,19 @@ CHECK_FUNCTION_EXISTS_GLIBC(ftruncate HA
 CHECK_FUNCTION_EXISTS_GLIBC(futimens HAVE_FUTIMENS)
 CHECK_FUNCTION_EXISTS_GLIBC(futimes HAVE_FUTIMES)
 CHECK_FUNCTION_EXISTS_GLIBC(futimesat HAVE_FUTIMESAT)
+CHECK_FUNCTION_EXISTS_GLIBC(getegid HAVE_GETEGID)
 CHECK_FUNCTION_EXISTS_GLIBC(geteuid HAVE_GETEUID)
 CHECK_FUNCTION_EXISTS_GLIBC(getgrgid_r HAVE_GETGRGID_R)
 CHECK_FUNCTION_EXISTS_GLIBC(getgrnam_r HAVE_GETGRNAM_R)
 CHECK_FUNCTION_EXISTS_GLIBC(getline HAVE_GETLINE)
+CHECK_FUNCTION_EXISTS_GLIBC(getpid HAVE_GETPID)
 CHECK_FUNCTION_EXISTS_GLIBC(getpwnam_r HAVE_GETPWNAM_R)
 CHECK_FUNCTION_EXISTS_GLIBC(getpwuid_r HAVE_GETPWUID_R)
-CHECK_FUNCTION_EXISTS_GLIBC(getpid HAVE_GETPID)
+CHECK_FUNCTION_EXISTS_GLIBC(getresgid HAVE_GETRESGID)
+CHECK_FUNCTION_EXISTS_GLIBC(getresuid HAVE_GETRESUID)
 CHECK_FUNCTION_EXISTS_GLIBC(getvfsbyname HAVE_GETVFSBYNAME)
 CHECK_FUNCTION_EXISTS_GLIBC(gmtime_r HAVE_GMTIME_R)
+CHECK_FUNCTION_EXISTS_GLIBC(issetugid HAVE_ISSETUGID)
 CHECK_FUNCTION_EXISTS_GLIBC(lchflags HAVE_LCHFLAGS)
 CHECK_FUNCTION_EXISTS_GLIBC(lchmod HAVE_LCHMOD)
 CHECK_FUNCTION_EXISTS_GLIBC(lchown HAVE_LCHOWN)
@@ -1579,12 +1592,6 @@ CHECK_C_SOURCE_COMPILES(
   "#include <sys/types.h>\n#include <sys/mount.h>\nint main(void) { struct statfs s; return sizeof(s);}"
   HAVE_STRUCT_STATFS)
 
-# Make sure we have the POSIX version of readdir_r, not the
-# older 2-argument version.
-CHECK_C_SOURCE_COMPILES(
-  "#include <dirent.h>\nint main() {DIR *d = opendir(\".\"); struct dirent e,*r; return readdir_r(d,&e,&r);}"
-  HAVE_READDIR_R)
-
 # dirfd can be either a function or a macro.
 CHECK_C_SOURCE_COMPILES(
   "#include <dirent.h>\nint main() {DIR *d = opendir(\".\"); return dirfd(d);}"

Index: pkgsrc/archivers/libarchive/files/Makefile.am
diff -u pkgsrc/archivers/libarchive/files/Makefile.am:1.20 pkgsrc/archivers/libarchive/files/Makefile.am:1.21
--- pkgsrc/archivers/libarchive/files/Makefile.am:1.20  Tue Jul  1 15:14:42 2025
+++ pkgsrc/archivers/libarchive/files/Makefile.am       Sun Nov  2 08:52:11 2025
@@ -132,6 +132,7 @@ libarchive_la_SOURCES= \
        libarchive/archive_pathmatch.h \
        libarchive/archive_platform.h \
        libarchive/archive_platform_acl.h \
+       libarchive/archive_platform_stat.h \
        libarchive/archive_platform_xattr.h \
        libarchive/archive_ppmd_private.h \
        libarchive/archive_ppmd7.c \
@@ -525,6 +526,7 @@ libarchive_test_SOURCES= \
        libarchive/test/test_read_format_rar5.c \
        libarchive/test/test_read_format_raw.c \
        libarchive/test/test_read_format_tar.c \
+       libarchive/test/test_read_format_tar_V_negative_size.c \
        libarchive/test/test_read_format_tar_concatenated.c \
        libarchive/test/test_read_format_tar_empty_pax.c \
        libarchive/test/test_read_format_tar_empty_filename.c \
@@ -921,6 +923,9 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_read_format_rar4_encrypted_filenames.rar.uu \
        libarchive/test/test_read_format_rar4_solid_encrypted.rar.uu \
        libarchive/test/test_read_format_rar4_solid_encrypted_filenames.rar.uu \
+       libarchive/test/test_read_format_rar5_only_crypt_exfld.rar.uu \
+       libarchive/test/test_read_format_rar5_unsupported_exfld.rar.uu \
+       libarchive/test/test_read_format_rar5_invalid_hash_valid_htime_exfld.rar.uu \
        libarchive/test/test_read_format_rar5_encrypted.rar.uu \
        libarchive/test/test_read_format_rar5_encrypted_filenames.rar.uu \
        libarchive/test/test_read_format_rar5_solid_encrypted.rar.uu \
@@ -952,6 +957,7 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_read_format_rar5_multiple_files.rar.uu \
        libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu \
        libarchive/test/test_read_format_rar5_nonempty_dir_stream.rar.uu \
+       libarchive/test/test_read_format_rar5_dirdata.rar.uu \
        libarchive/test/test_read_format_rar5_owner.rar.uu \
        libarchive/test/test_read_format_rar5_readtables_overflow.rar.uu \
        libarchive/test/test_read_format_rar5_sfx.exe.uu \
@@ -972,6 +978,7 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_read_format_raw.data.gz.uu \
        libarchive/test/test_read_format_raw.data.Z.uu \
        libarchive/test/test_read_format_raw.data.uu \
+       libarchive/test/test_read_format_tar_V_negative_size.tar.uu \
        libarchive/test/test_read_format_tar_concatenated.tar.uu \
        libarchive/test/test_read_format_tar_empty_filename.tar.uu \
        libarchive/test/test_read_format_tar_empty_with_gnulabel.tar.uu \
@@ -1058,6 +1065,7 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_splitted_rar_seek_support_ab.uu \
        libarchive/test/test_splitted_rar_seek_support_ac.uu \
        libarchive/test/test_write_disk_appledouble.cpio.gz.uu \
+       libarchive/test/test_write_disk_appledouble_zip.zip.uu \
        libarchive/test/test_write_disk_hfs_compression.tgz.uu \
        libarchive/test/test_write_disk_mac_metadata.tar.gz.uu \
        libarchive/test/test_write_disk_no_hfs_compression.tgz.uu \
@@ -1068,8 +1076,8 @@ libarchive_test_EXTRA_DIST=\
 # Common code for libarchive frontends (cpio, tar)
 #
 libarchive_fe_la_SOURCES= \
-       libarchive_fe/err.c \
-       libarchive_fe/err.h \
+       libarchive_fe/lafe_err.c \
+       libarchive_fe/lafe_err.h \
        libarchive_fe/lafe_platform.h \
        libarchive_fe/line_reader.c \
        libarchive_fe/line_reader.h \
@@ -1140,6 +1148,7 @@ bsdtar_test_SOURCES= \
        tar/test/test_0.c \
        tar/test/test_basic.c \
        tar/test/test_copy.c \
+       tar/test/test_crlf_mtree.c \
        tar/test/test_empty_mtree.c \
        tar/test/test_extract_tar_Z.c \
        tar/test/test_extract_tar_bz2.c \

Index: pkgsrc/archivers/libarchive/files/Makefile.in
diff -u pkgsrc/archivers/libarchive/files/Makefile.in:1.22 pkgsrc/archivers/libarchive/files/Makefile.in:1.23
--- pkgsrc/archivers/libarchive/files/Makefile.in:1.22  Tue Jul  1 15:14:42 2025
+++ pkgsrc/archivers/libarchive/files/Makefile.in       Sun Nov  2 08:52:11 2025
@@ -220,6 +220,7 @@ am__libarchive_la_SOURCES_DIST = libarch
        libarchive/archive_parse_date.c libarchive/archive_pathmatch.c \
        libarchive/archive_pathmatch.h libarchive/archive_platform.h \
        libarchive/archive_platform_acl.h \
+       libarchive/archive_platform_stat.h \
        libarchive/archive_platform_xattr.h \
        libarchive/archive_ppmd_private.h libarchive/archive_ppmd7.c \
        libarchive/archive_ppmd7_private.h libarchive/archive_ppmd8.c \
@@ -477,7 +478,7 @@ libarchive_la_LINK = $(LIBTOOL) $(AM_V_l
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(libarchive_la_LDFLAGS) $(LDFLAGS) -o $@
 libarchive_fe_la_LIBADD =
-am_libarchive_fe_la_OBJECTS = libarchive_fe/la-err.lo \
+am_libarchive_fe_la_OBJECTS = libarchive_fe/la-lafe_err.lo \
        libarchive_fe/la-line_reader.lo libarchive_fe/la-passphrase.lo
 libarchive_fe_la_OBJECTS = $(am_libarchive_fe_la_OBJECTS)
 am__objects_7 =
@@ -596,6 +597,7 @@ am_bsdtar_test_OBJECTS = $(am__objects_1
        tar/test/bsdtar_test-test_0.$(OBJEXT) \
        tar/test/bsdtar_test-test_basic.$(OBJEXT) \
        tar/test/bsdtar_test-test_copy.$(OBJEXT) \
+       tar/test/bsdtar_test-test_crlf_mtree.$(OBJEXT) \
        tar/test/bsdtar_test-test_empty_mtree.$(OBJEXT) \
        tar/test/bsdtar_test-test_extract_tar_Z.$(OBJEXT) \
        tar/test/bsdtar_test-test_extract_tar_bz2.$(OBJEXT) \
@@ -726,6 +728,7 @@ am__libarchive_test_SOURCES_DIST = libar
        libarchive/archive_parse_date.c libarchive/archive_pathmatch.c \
        libarchive/archive_pathmatch.h libarchive/archive_platform.h \
        libarchive/archive_platform_acl.h \
+       libarchive/archive_platform_stat.h \
        libarchive/archive_platform_xattr.h \
        libarchive/archive_ppmd_private.h libarchive/archive_ppmd7.c \
        libarchive/archive_ppmd7_private.h libarchive/archive_ppmd8.c \
@@ -1007,6 +1010,7 @@ am__libarchive_test_SOURCES_DIST = libar
        libarchive/test/test_read_format_rar5.c \
        libarchive/test/test_read_format_raw.c \
        libarchive/test/test_read_format_tar.c \
+       libarchive/test/test_read_format_tar_V_negative_size.c \
        libarchive/test/test_read_format_tar_concatenated.c \
        libarchive/test/test_read_format_tar_empty_pax.c \
        libarchive/test/test_read_format_tar_empty_filename.c \
@@ -1449,6 +1453,7 @@ am_libarchive_test_OBJECTS = $(am__objec
        libarchive/test/test-test_read_format_rar5.$(OBJEXT) \
        libarchive/test/test-test_read_format_raw.$(OBJEXT) \
        libarchive/test/test-test_read_format_tar.$(OBJEXT) \
+       libarchive/test/test-test_read_format_tar_V_negative_size.$(OBJEXT) \
        libarchive/test/test-test_read_format_tar_concatenated.$(OBJEXT) \
        libarchive/test/test-test_read_format_tar_empty_pax.$(OBJEXT) \
        libarchive/test/test-test_read_format_tar_empty_filename.$(OBJEXT) \
@@ -2108,6 +2113,7 @@ am__depfiles_remade = cat/$(DEPDIR)/bsdc
        libarchive/test/$(DEPDIR)/test-test_read_format_rar_overflow.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_raw.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_tar.Po \
+       libarchive/test/$(DEPDIR)/test-test_read_format_tar_V_negative_size.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_tar_concatenated.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_filename.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_pax.Po \
@@ -2253,7 +2259,7 @@ am__depfiles_remade = cat/$(DEPDIR)/bsdc
        libarchive/test/$(DEPDIR)/test-test_write_read_format_zip.Po \
        libarchive/test/$(DEPDIR)/test-test_xattr_platform.Po \
        libarchive/test/$(DEPDIR)/test-test_zip_filename_encoding.Po \
-       libarchive_fe/$(DEPDIR)/la-err.Plo \
+       libarchive_fe/$(DEPDIR)/la-lafe_err.Plo \
        libarchive_fe/$(DEPDIR)/la-line_reader.Plo \
        libarchive_fe/$(DEPDIR)/la-passphrase.Plo \
        tar/$(DEPDIR)/bsdtar-bsdtar.Po \
@@ -2265,6 +2271,7 @@ am__depfiles_remade = cat/$(DEPDIR)/bsdc
        tar/test/$(DEPDIR)/bsdtar_test-test_0.Po \
        tar/test/$(DEPDIR)/bsdtar_test-test_basic.Po \
        tar/test/$(DEPDIR)/bsdtar_test-test_copy.Po \
+       tar/test/$(DEPDIR)/bsdtar_test-test_crlf_mtree.Po \
        tar/test/$(DEPDIR)/bsdtar_test-test_empty_mtree.Po \
        tar/test/$(DEPDIR)/bsdtar_test-test_extract_tar_Z.Po \
        tar/test/$(DEPDIR)/bsdtar_test-test_extract_tar_bz2.Po \
@@ -2871,6 +2878,7 @@ libarchive_la_SOURCES = libarchive/archi
        libarchive/archive_parse_date.c libarchive/archive_pathmatch.c \
        libarchive/archive_pathmatch.h libarchive/archive_platform.h \
        libarchive/archive_platform_acl.h \
+       libarchive/archive_platform_stat.h \
        libarchive/archive_platform_xattr.h \
        libarchive/archive_ppmd_private.h libarchive/archive_ppmd7.c \
        libarchive/archive_ppmd7_private.h libarchive/archive_ppmd8.c \
@@ -3224,6 +3232,7 @@ libarchive_test_SOURCES = \
        libarchive/test/test_read_format_rar5.c \
        libarchive/test/test_read_format_raw.c \
        libarchive/test/test_read_format_tar.c \
+       libarchive/test/test_read_format_tar_V_negative_size.c \
        libarchive/test/test_read_format_tar_concatenated.c \
        libarchive/test/test_read_format_tar_empty_pax.c \
        libarchive/test/test_read_format_tar_empty_filename.c \
@@ -3611,6 +3620,9 @@ libarchive_test_EXTRA_DIST = \
        libarchive/test/test_read_format_rar4_encrypted_filenames.rar.uu \
        libarchive/test/test_read_format_rar4_solid_encrypted.rar.uu \
        libarchive/test/test_read_format_rar4_solid_encrypted_filenames.rar.uu \
+       libarchive/test/test_read_format_rar5_only_crypt_exfld.rar.uu \
+       libarchive/test/test_read_format_rar5_unsupported_exfld.rar.uu \
+       libarchive/test/test_read_format_rar5_invalid_hash_valid_htime_exfld.rar.uu \
        libarchive/test/test_read_format_rar5_encrypted.rar.uu \
        libarchive/test/test_read_format_rar5_encrypted_filenames.rar.uu \
        libarchive/test/test_read_format_rar5_solid_encrypted.rar.uu \
@@ -3642,6 +3654,7 @@ libarchive_test_EXTRA_DIST = \
        libarchive/test/test_read_format_rar5_multiple_files.rar.uu \
        libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu \
        libarchive/test/test_read_format_rar5_nonempty_dir_stream.rar.uu \
+       libarchive/test/test_read_format_rar5_dirdata.rar.uu \
        libarchive/test/test_read_format_rar5_owner.rar.uu \
        libarchive/test/test_read_format_rar5_readtables_overflow.rar.uu \
        libarchive/test/test_read_format_rar5_sfx.exe.uu \
@@ -3662,6 +3675,7 @@ libarchive_test_EXTRA_DIST = \
        libarchive/test/test_read_format_raw.data.gz.uu \
        libarchive/test/test_read_format_raw.data.Z.uu \
        libarchive/test/test_read_format_raw.data.uu \
+       libarchive/test/test_read_format_tar_V_negative_size.tar.uu \
        libarchive/test/test_read_format_tar_concatenated.tar.uu \
        libarchive/test/test_read_format_tar_empty_filename.tar.uu \
        libarchive/test/test_read_format_tar_empty_with_gnulabel.tar.uu \
@@ -3748,6 +3762,7 @@ libarchive_test_EXTRA_DIST = \
        libarchive/test/test_splitted_rar_seek_support_ab.uu \
        libarchive/test/test_splitted_rar_seek_support_ac.uu \
        libarchive/test/test_write_disk_appledouble.cpio.gz.uu \
+       libarchive/test/test_write_disk_appledouble_zip.zip.uu \
        libarchive/test/test_write_disk_hfs_compression.tgz.uu \
        libarchive/test/test_write_disk_mac_metadata.tar.gz.uu \
        libarchive/test/test_write_disk_no_hfs_compression.tgz.uu \
@@ -3759,8 +3774,8 @@ libarchive_test_EXTRA_DIST = \
 # Common code for libarchive frontends (cpio, tar)
 #
 libarchive_fe_la_SOURCES = \
-       libarchive_fe/err.c \
-       libarchive_fe/err.h \
+       libarchive_fe/lafe_err.c \
+       libarchive_fe/lafe_err.h \
        libarchive_fe/lafe_platform.h \
        libarchive_fe/line_reader.c \
        libarchive_fe/line_reader.h \
@@ -3805,6 +3820,7 @@ bsdtar_test_SOURCES = \
        tar/test/test_0.c \
        tar/test/test_basic.c \
        tar/test/test_copy.c \
+       tar/test/test_crlf_mtree.c \
        tar/test/test_empty_mtree.c \
        tar/test/test_extract_tar_Z.c \
        tar/test/test_extract_tar_bz2.c \
@@ -4698,7 +4714,7 @@ libarchive_fe/$(am__dirstamp):
 libarchive_fe/$(DEPDIR)/$(am__dirstamp):
        @$(MKDIR_P) libarchive_fe/$(DEPDIR)
        @: > libarchive_fe/$(DEPDIR)/$(am__dirstamp)
-libarchive_fe/la-err.lo: libarchive_fe/$(am__dirstamp) \
+libarchive_fe/la-lafe_err.lo: libarchive_fe/$(am__dirstamp) \
        libarchive_fe/$(DEPDIR)/$(am__dirstamp)
 libarchive_fe/la-line_reader.lo: libarchive_fe/$(am__dirstamp) \
        libarchive_fe/$(DEPDIR)/$(am__dirstamp)
@@ -4955,6 +4971,8 @@ tar/test/bsdtar_test-test_basic.$(OBJEXT
        tar/test/$(DEPDIR)/$(am__dirstamp)
 tar/test/bsdtar_test-test_copy.$(OBJEXT): tar/test/$(am__dirstamp) \
        tar/test/$(DEPDIR)/$(am__dirstamp)
+tar/test/bsdtar_test-test_crlf_mtree.$(OBJEXT):  \
+       tar/test/$(am__dirstamp) tar/test/$(DEPDIR)/$(am__dirstamp)
 tar/test/bsdtar_test-test_empty_mtree.$(OBJEXT):  \
        tar/test/$(am__dirstamp) tar/test/$(DEPDIR)/$(am__dirstamp)
 tar/test/bsdtar_test-test_extract_tar_Z.$(OBJEXT):  \
@@ -6046,6 +6064,9 @@ libarchive/test/test-test_read_format_ra
 libarchive/test/test-test_read_format_tar.$(OBJEXT):  \
        libarchive/test/$(am__dirstamp) \
        libarchive/test/$(DEPDIR)/$(am__dirstamp)
+libarchive/test/test-test_read_format_tar_V_negative_size.$(OBJEXT):  \
+       libarchive/test/$(am__dirstamp) \
+       libarchive/test/$(DEPDIR)/$(am__dirstamp)
 libarchive/test/test-test_read_format_tar_concatenated.$(OBJEXT):  \
        libarchive/test/$(am__dirstamp) \
        libarchive/test/$(DEPDIR)/$(am__dirstamp)
@@ -7003,6 +7024,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_rar_overflow.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_raw.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_tar.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_tar_V_negative_size.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_tar_concatenated.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_filename.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_pax.Po@am__quote@ # am--include-marker
@@ -7148,7 +7170,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_write_read_format_zip.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_xattr_platform.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_zip_filename_encoding.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@libarchive_fe/$(DEPDIR)/la-err.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@libarchive_fe/$(DEPDIR)/la-lafe_err.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive_fe/$(DEPDIR)/la-line_reader.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive_fe/$(DEPDIR)/la-passphrase.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@tar/$(DEPDIR)/bsdtar-bsdtar.Po@am__quote@ # am--include-marker
@@ -7162,6 +7184,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_0.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_basic.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_copy.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_crlf_mtree.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_empty_mtree.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_extract_tar_Z.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_extract_tar_bz2.Po@am__quote@ # am--include-marker
@@ -7295,12 +7318,12 @@ am--depfiles: $(am__depfiles_remade)
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-libarchive_fe/la-err.lo: libarchive_fe/err.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_fe_la_CPPFLAGS) 
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive_fe/la-err.lo -MD -MP -MF libarchive_fe/$(DEPDIR)/la-err.Tpo -c -o libarchive_fe/la-err.lo `test -f 'libarchive_fe/err.c' || echo 
'$(srcdir)/'`libarchive_fe/err.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive_fe/$(DEPDIR)/la-err.Tpo libarchive_fe/$(DEPDIR)/la-err.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive_fe/err.c' object='libarchive_fe/la-err.lo' libtool=yes @AMDEPBACKSLASH@
+libarchive_fe/la-lafe_err.lo: libarchive_fe/lafe_err.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_fe_la_CPPFLAGS) 
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive_fe/la-lafe_err.lo -MD -MP -MF libarchive_fe/$(DEPDIR)/la-lafe_err.Tpo -c -o libarchive_fe/la-lafe_err.lo `test -f 'libarchive_fe/lafe_err.c' || echo 
'$(srcdir)/'`libarchive_fe/lafe_err.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive_fe/$(DEPDIR)/la-lafe_err.Tpo libarchive_fe/$(DEPDIR)/la-lafe_err.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive_fe/lafe_err.c' object='libarchive_fe/la-lafe_err.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(libarchive_fe_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive_fe/la-err.lo `test -f 'libarchive_fe/err.c' || echo '$(srcdir)/'`libarchive_fe/err.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(libarchive_fe_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive_fe/la-lafe_err.lo `test -f 'libarchive_fe/lafe_err.c' || echo '$(srcdir)/'`libarchive_fe/lafe_err.c
 
 libarchive_fe/la-line_reader.lo: libarchive_fe/line_reader.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_fe_la_CPPFLAGS) 
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive_fe/la-line_reader.lo -MD -MP -MF libarchive_fe/$(DEPDIR)/la-line_reader.Tpo -c -o libarchive_fe/la-line_reader.lo `test -f 
'libarchive_fe/line_reader.c' || echo '$(srcdir)/'`libarchive_fe/line_reader.c
@@ -8576,6 +8599,20 @@ tar/test/bsdtar_test-test_copy.obj: tar/
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tar/test/bsdtar_test-test_copy.obj `if test 
-f 'tar/test/test_copy.c'; then $(CYGPATH_W) 'tar/test/test_copy.c'; else $(CYGPATH_W) '$(srcdir)/tar/test/test_copy.c'; fi`
 
+tar/test/bsdtar_test-test_crlf_mtree.o: tar/test/test_crlf_mtree.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tar/test/bsdtar_test-test_crlf_mtree.o -MD -MP -MF 
tar/test/$(DEPDIR)/bsdtar_test-test_crlf_mtree.Tpo -c -o tar/test/bsdtar_test-test_crlf_mtree.o `test -f 'tar/test/test_crlf_mtree.c' || echo '$(srcdir)/'`tar/test/test_crlf_mtree.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) tar/test/$(DEPDIR)/bsdtar_test-test_crlf_mtree.Tpo tar/test/$(DEPDIR)/bsdtar_test-test_crlf_mtree.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tar/test/test_crlf_mtree.c' object='tar/test/bsdtar_test-test_crlf_mtree.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tar/test/bsdtar_test-test_crlf_mtree.o 
`test -f 'tar/test/test_crlf_mtree.c' || echo '$(srcdir)/'`tar/test/test_crlf_mtree.c
+
+tar/test/bsdtar_test-test_crlf_mtree.obj: tar/test/test_crlf_mtree.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tar/test/bsdtar_test-test_crlf_mtree.obj -MD -MP -MF 
tar/test/$(DEPDIR)/bsdtar_test-test_crlf_mtree.Tpo -c -o tar/test/bsdtar_test-test_crlf_mtree.obj `if test -f 'tar/test/test_crlf_mtree.c'; then $(CYGPATH_W) 'tar/test/test_crlf_mtree.c'; else 
$(CYGPATH_W) '$(srcdir)/tar/test/test_crlf_mtree.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) tar/test/$(DEPDIR)/bsdtar_test-test_crlf_mtree.Tpo tar/test/$(DEPDIR)/bsdtar_test-test_crlf_mtree.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tar/test/test_crlf_mtree.c' object='tar/test/bsdtar_test-test_crlf_mtree.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tar/test/bsdtar_test-test_crlf_mtree.obj 
`if test -f 'tar/test/test_crlf_mtree.c'; then $(CYGPATH_W) 'tar/test/test_crlf_mtree.c'; else $(CYGPATH_W) '$(srcdir)/tar/test/test_crlf_mtree.c'; fi`
+
 tar/test/bsdtar_test-test_empty_mtree.o: tar/test/test_empty_mtree.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tar/test/bsdtar_test-test_empty_mtree.o -MD -MP -MF 
tar/test/$(DEPDIR)/bsdtar_test-test_empty_mtree.Tpo -c -o tar/test/bsdtar_test-test_empty_mtree.o `test -f 'tar/test/test_empty_mtree.c' || echo '$(srcdir)/'`tar/test/test_empty_mtree.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) tar/test/$(DEPDIR)/bsdtar_test-test_empty_mtree.Tpo tar/test/$(DEPDIR)/bsdtar_test-test_empty_mtree.Po
@@ -14008,6 +14045,20 @@ libarchive/test/test-test_read_format_ta
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o 
libarchive/test/test-test_read_format_tar.obj `if test -f 'libarchive/test/test_read_format_tar.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_tar.c'; else $(CYGPATH_W) 
'$(srcdir)/libarchive/test/test_read_format_tar.c'; fi`
 
+libarchive/test/test-test_read_format_tar_V_negative_size.o: libarchive/test/test_read_format_tar_V_negative_size.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT 
libarchive/test/test-test_read_format_tar_V_negative_size.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_tar_V_negative_size.Tpo -c -o 
libarchive/test/test-test_read_format_tar_V_negative_size.o `test -f 'libarchive/test/test_read_format_tar_V_negative_size.c' || echo 
'$(srcdir)/'`libarchive/test/test_read_format_tar_V_negative_size.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_tar_V_negative_size.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_tar_V_negative_size.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive/test/test_read_format_tar_V_negative_size.c' object='libarchive/test/test-test_read_format_tar_V_negative_size.o' libtool=no 
@AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o 
libarchive/test/test-test_read_format_tar_V_negative_size.o `test -f 'libarchive/test/test_read_format_tar_V_negative_size.c' || echo 
'$(srcdir)/'`libarchive/test/test_read_format_tar_V_negative_size.c
+
+libarchive/test/test-test_read_format_tar_V_negative_size.obj: libarchive/test/test_read_format_tar_V_negative_size.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT 
libarchive/test/test-test_read_format_tar_V_negative_size.obj -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_tar_V_negative_size.Tpo -c -o 
libarchive/test/test-test_read_format_tar_V_negative_size.obj `if test -f 'libarchive/test/test_read_format_tar_V_negative_size.c'; then $(CYGPATH_W) 
'libarchive/test/test_read_format_tar_V_negative_size.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_tar_V_negative_size.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_tar_V_negative_size.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_tar_V_negative_size.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive/test/test_read_format_tar_V_negative_size.c' object='libarchive/test/test-test_read_format_tar_V_negative_size.obj' libtool=no 
@AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o 
libarchive/test/test-test_read_format_tar_V_negative_size.obj `if test -f 'libarchive/test/test_read_format_tar_V_negative_size.c'; then $(CYGPATH_W) 
'libarchive/test/test_read_format_tar_V_negative_size.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_tar_V_negative_size.c'; fi`
+
 libarchive/test/test-test_read_format_tar_concatenated.o: libarchive/test/test_read_format_tar_concatenated.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT 
libarchive/test/test-test_read_format_tar_concatenated.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_tar_concatenated.Tpo -c -o 
libarchive/test/test-test_read_format_tar_concatenated.o `test -f 'libarchive/test/test_read_format_tar_concatenated.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_tar_concatenated.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_tar_concatenated.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_tar_concatenated.Po
@@ -17223,6 +17274,7 @@ distclean: distclean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_rar_overflow.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_raw.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar.Po
+       -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_V_negative_size.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_concatenated.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_filename.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_pax.Po
@@ -17368,7 +17420,7 @@ distclean: distclean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_read_format_zip.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_xattr_platform.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_zip_filename_encoding.Po
-       -rm -f libarchive_fe/$(DEPDIR)/la-err.Plo
+       -rm -f libarchive_fe/$(DEPDIR)/la-lafe_err.Plo
        -rm -f libarchive_fe/$(DEPDIR)/la-line_reader.Plo
        -rm -f libarchive_fe/$(DEPDIR)/la-passphrase.Plo
        -rm -f tar/$(DEPDIR)/bsdtar-bsdtar.Po
@@ -17382,6 +17434,7 @@ distclean: distclean-am
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_0.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_basic.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_copy.Po
+       -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_crlf_mtree.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_empty_mtree.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_extract_tar_Z.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_extract_tar_bz2.Po
@@ -18029,6 +18082,7 @@ maintainer-clean: maintainer-clean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_rar_overflow.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_raw.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar.Po
+       -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_V_negative_size.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_concatenated.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_filename.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_pax.Po
@@ -18174,7 +18228,7 @@ maintainer-clean: maintainer-clean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_read_format_zip.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_xattr_platform.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_zip_filename_encoding.Po
-       -rm -f libarchive_fe/$(DEPDIR)/la-err.Plo
+       -rm -f libarchive_fe/$(DEPDIR)/la-lafe_err.Plo
        -rm -f libarchive_fe/$(DEPDIR)/la-line_reader.Plo
        -rm -f libarchive_fe/$(DEPDIR)/la-passphrase.Plo
        -rm -f tar/$(DEPDIR)/bsdtar-bsdtar.Po
@@ -18188,6 +18242,7 @@ maintainer-clean: maintainer-clean-am
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_0.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_basic.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_copy.Po
+       -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_crlf_mtree.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_empty_mtree.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_extract_tar_Z.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_extract_tar_bz2.Po

Index: pkgsrc/archivers/libarchive/files/NEWS
diff -u pkgsrc/archivers/libarchive/files/NEWS:1.21 pkgsrc/archivers/libarchive/files/NEWS:1.22
--- pkgsrc/archivers/libarchive/files/NEWS:1.21 Tue Jul  1 15:14:42 2025
+++ pkgsrc/archivers/libarchive/files/NEWS      Sun Nov  2 08:52:11 2025
@@ -1,3 +1,5 @@
+Oct 15, 2026: libarchive 3.8.2 released
+
 Jun 01, 2026: libarchive 3.8.1 released
 
 May 20, 2025: libarchive 3.8.0 released
Index: pkgsrc/archivers/libarchive/files/config.h.in
diff -u pkgsrc/archivers/libarchive/files/config.h.in:1.21 pkgsrc/archivers/libarchive/files/config.h.in:1.22
--- pkgsrc/archivers/libarchive/files/config.h.in:1.21  Wed May 21 15:25:47 2025
+++ pkgsrc/archivers/libarchive/files/config.h.in       Sun Nov  2 08:52:11 2025
@@ -318,6 +318,12 @@
 /* Define to 1 if you have the `chroot' function. */
 #undef HAVE_CHROOT
 
+/* Define to 1 if you have the `closefrom' function. */
+#undef HAVE_CLOSEFROM
+
+/* Define to 1 if you have the `close_range' function. */
+#undef HAVE_CLOSE_RANGE
+
 /* cmtime_s function */
 #undef HAVE_CMTIME_S
 
@@ -565,6 +571,9 @@
 /* Define to 1 if you have the `getea' function. */
 #undef HAVE_GETEA
 
+/* Define to 1 if you have the `getegid' function. */
+#undef HAVE_GETEGID
+
 /* Define to 1 if you have the `geteuid' function. */
 #undef HAVE_GETEUID
 
@@ -586,6 +595,12 @@
 /* Define to 1 if you have the `getpwuid_r' function. */
 #undef HAVE_GETPWUID_R
 
+/* Define to 1 if you have the `getresgid' function. */
+#undef HAVE_GETRESGID
+
+/* Define to 1 if you have the `getresuid' function. */
+#undef HAVE_GETRESUID
+
 /* Define to 1 if you have the `getvfsbyname' function. */
 #undef HAVE_GETVFSBYNAME
 
@@ -616,6 +631,9 @@
 /* Define to 1 if you have the <io.h> header file. */
 #undef HAVE_IO_H
 
+/* Define to 1 if you have the `issetugid' function. */
+#undef HAVE_ISSETUGID
+
 /* Define to 1 if you have the <langinfo.h> header file. */
 #undef HAVE_LANGINFO_H
 
@@ -911,9 +929,6 @@
 /* Define to 1 if you have the <pwd.h> header file. */
 #undef HAVE_PWD_H
 
-/* Define to 1 if you have a POSIX compatible readdir_r */
-#undef HAVE_READDIR_R
-
 /* Define to 1 if you have the `readlink' function. */
 #undef HAVE_READLINK
 

Index: pkgsrc/archivers/libarchive/files/configure
diff -u pkgsrc/archivers/libarchive/files/configure:1.30 pkgsrc/archivers/libarchive/files/configure:1.31
--- pkgsrc/archivers/libarchive/files/configure:1.30    Tue Jul  1 15:14:42 2025
+++ pkgsrc/archivers/libarchive/files/configure Sun Nov  2 08:52:11 2025
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for libarchive 3.8.1.
+# Generated by GNU Autoconf 2.71 for libarchive 3.8.2.
 #
 # Report bugs to <libarchive-discuss%googlegroups.com@localhost>.
 #
@@ -621,8 +621,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='libarchive'
 PACKAGE_TARNAME='libarchive'
-PACKAGE_VERSION='3.8.1'
-PACKAGE_STRING='libarchive 3.8.1'
+PACKAGE_VERSION='3.8.2'
+PACKAGE_STRING='libarchive 3.8.2'
 PACKAGE_BUGREPORT='libarchive-discuss%googlegroups.com@localhost'
 PACKAGE_URL=''
 
@@ -1443,7 +1443,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libarchive 3.8.1 to adapt to many kinds of systems.
+\`configure' configures libarchive 3.8.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1514,7 +1514,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libarchive 3.8.1:";;
+     short | recursive ) echo "Configuration of libarchive 3.8.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1698,7 +1698,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libarchive configure 3.8.1
+libarchive configure 3.8.2
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2492,7 +2492,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libarchive $as_me 3.8.1, which was
+It was created by libarchive $as_me 3.8.2, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3772,7 +3772,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='libarchive'
- VERSION='3.8.1'
+ VERSION='3.8.2'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -3945,7 +3945,7 @@ AM_BACKSLASH='\'
 
 # Libtool interface version bumps on any API change, so increments
 # whenever libarchive minor version does.
-ARCHIVE_MINOR=$(( (3008001 / 1000) % 1000 ))
+ARCHIVE_MINOR=$(( (3008002 / 1000) % 1000 ))
 # Libarchive 2.7 == libtool interface 9 = 2 + 7
 # Libarchive 2.8 == libtool interface 10 = 2 + 8
 # Libarchive 2.9 == libtool interface 11 = 2 + 9
@@ -3953,7 +3953,7 @@ ARCHIVE_MINOR=$(( (3008001 / 1000) % 100
 # Libarchive 3.1 == libtool interface 13
 ARCHIVE_INTERFACE=`echo $((13 + ${ARCHIVE_MINOR}))`
 # Libarchive revision is bumped on any source change === libtool revision
-ARCHIVE_REVISION=$(( 3008001 % 1000 ))
+ARCHIVE_REVISION=$(( 3008002 % 1000 ))
 # Libarchive minor is bumped on any interface addition === libtool age
 ARCHIVE_LIBTOOL_VERSION=$ARCHIVE_INTERFACE:$ARCHIVE_REVISION:$ARCHIVE_MINOR
 
@@ -3962,33 +3962,33 @@ ARCHIVE_LIBTOOL_VERSION=$ARCHIVE_INTERFA
 printf "%s\n" "#define __LIBARCHIVE_CONFIG_H_INCLUDED 1" >>confdefs.h
 
 
-printf "%s\n" "#define LIBARCHIVE_VERSION_STRING \"3.8.1\"" >>confdefs.h
+printf "%s\n" "#define LIBARCHIVE_VERSION_STRING \"3.8.2\"" >>confdefs.h
 
 
-printf "%s\n" "#define LIBARCHIVE_VERSION_NUMBER \"3008001\"" >>confdefs.h
+printf "%s\n" "#define LIBARCHIVE_VERSION_NUMBER \"3008002\"" >>confdefs.h
 
 
-printf "%s\n" "#define BSDCPIO_VERSION_STRING \"3.8.1\"" >>confdefs.h
+printf "%s\n" "#define BSDCPIO_VERSION_STRING \"3.8.2\"" >>confdefs.h
 
 
-printf "%s\n" "#define BSDTAR_VERSION_STRING \"3.8.1\"" >>confdefs.h
+printf "%s\n" "#define BSDTAR_VERSION_STRING \"3.8.2\"" >>confdefs.h
 
 
-printf "%s\n" "#define BSDCAT_VERSION_STRING \"3.8.1\"" >>confdefs.h
+printf "%s\n" "#define BSDCAT_VERSION_STRING \"3.8.2\"" >>confdefs.h
 
 
-printf "%s\n" "#define BSDUNZIP_VERSION_STRING \"3.8.1\"" >>confdefs.h
+printf "%s\n" "#define BSDUNZIP_VERSION_STRING \"3.8.2\"" >>confdefs.h
 
 
 # The shell variables here must be the same as the AC_SUBST() variables
 # below, but the shell variable names apparently cannot be the same as
 # the m4 macro names above.  Why?  Ask autoconf.
-BSDCPIO_VERSION_STRING=3.8.1
-BSDTAR_VERSION_STRING=3.8.1
-BSDCAT_VERSION_STRING=3.8.1
-BSDUNZIP_VERSION_STRING=3.8.1
-LIBARCHIVE_VERSION_STRING=3.8.1
-LIBARCHIVE_VERSION_NUMBER=3008001
+BSDCPIO_VERSION_STRING=3.8.2
+BSDTAR_VERSION_STRING=3.8.2
+BSDCAT_VERSION_STRING=3.8.2
+BSDUNZIP_VERSION_STRING=3.8.2
+LIBARCHIVE_VERSION_STRING=3.8.2
+LIBARCHIVE_VERSION_NUMBER=3008002
 
 # Substitute the above version numbers into the various files below.
 # Yes, I believe this is the fourth time we define what are essentially
@@ -19897,6 +19897,19 @@ then :
   printf "%s\n" "#define HAVE_CHROOT 1" >>confdefs.h
 
 fi
+
+ac_fn_c_check_func "$LINENO" "closefrom" "ac_cv_func_closefrom"
+if test "x$ac_cv_func_closefrom" = xyes
+then :
+  printf "%s\n" "#define HAVE_CLOSEFROM 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "close_range" "ac_cv_func_close_range"
+if test "x$ac_cv_func_close_range" = xyes
+then :
+  printf "%s\n" "#define HAVE_CLOSE_RANGE 1" >>confdefs.h
+
+fi
 ac_fn_c_check_func "$LINENO" "ctime_r" "ac_cv_func_ctime_r"
 if test "x$ac_cv_func_ctime_r" = xyes
 then :
@@ -20003,6 +20016,12 @@ then :
 
 fi
 
+ac_fn_c_check_func "$LINENO" "getegid" "ac_cv_func_getegid"
+if test "x$ac_cv_func_getegid" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETEGID 1" >>confdefs.h
+
+fi
 ac_fn_c_check_func "$LINENO" "geteuid" "ac_cv_func_geteuid"
 if test "x$ac_cv_func_geteuid" = xyes
 then :
@@ -20021,6 +20040,19 @@ then :
   printf "%s\n" "#define HAVE_GETPID 1" >>confdefs.h
 
 fi
+ac_fn_c_check_func "$LINENO" "getresgid" "ac_cv_func_getresgid"
+if test "x$ac_cv_func_getresgid" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETRESGID 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getresuid" "ac_cv_func_getresuid"
+if test "x$ac_cv_func_getresuid" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETRESUID 1" >>confdefs.h
+
+fi
+
 ac_fn_c_check_func "$LINENO" "getgrgid_r" "ac_cv_func_getgrgid_r"
 if test "x$ac_cv_func_getgrgid_r" = xyes
 then :
@@ -20033,7 +20065,6 @@ then :
   printf "%s\n" "#define HAVE_GETGRNAM_R 1" >>confdefs.h
 
 fi
-
 ac_fn_c_check_func "$LINENO" "getpwnam_r" "ac_cv_func_getpwnam_r"
 if test "x$ac_cv_func_getpwnam_r" = xyes
 then :
@@ -20046,6 +20077,7 @@ then :
   printf "%s\n" "#define HAVE_GETPWUID_R 1" >>confdefs.h
 
 fi
+
 ac_fn_c_check_func "$LINENO" "getvfsbyname" "ac_cv_func_getvfsbyname"
 if test "x$ac_cv_func_getvfsbyname" = xyes
 then :
@@ -20059,6 +20091,13 @@ then :
 
 fi
 
+ac_fn_c_check_func "$LINENO" "issetugid" "ac_cv_func_issetugid"
+if test "x$ac_cv_func_issetugid" = xyes
+then :
+  printf "%s\n" "#define HAVE_ISSETUGID 1" >>confdefs.h
+
+fi
+
 ac_fn_c_check_func "$LINENO" "lchflags" "ac_cv_func_lchflags"
 if test "x$ac_cv_func_lchflags" = xyes
 then :
@@ -20502,29 +20541,6 @@ printf "%s\n" "#define HAVE_STRUCT_STATF
 fi
 
 
-# There are several variants of readdir_r around; we only
-# accept the POSIX-compliant version.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <dirent.h>
-int
-main (void)
-{
-DIR *dir; struct dirent e, *r;
-                   return(readdir_r(dir, &e, &r));
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
-
-printf "%s\n" "#define HAVE_READDIR_R 1" >>confdefs.h
-
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
-    conftest$ac_exeext conftest.$ac_ext
 # dirfd can be either a function or a macro.
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -24793,7 +24809,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libarchive $as_me 3.8.1, which was
+This file was extended by libarchive $as_me 3.8.2, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -24861,7 +24877,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-libarchive config.status 3.8.1
+libarchive config.status 3.8.2
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 

Index: pkgsrc/archivers/libarchive/files/configure.ac
diff -u pkgsrc/archivers/libarchive/files/configure.ac:1.29 pkgsrc/archivers/libarchive/files/configure.ac:1.30
--- pkgsrc/archivers/libarchive/files/configure.ac:1.29 Tue Jul  1 15:14:42 2025
+++ pkgsrc/archivers/libarchive/files/configure.ac      Sun Nov  2 08:52:11 2025
@@ -4,8 +4,8 @@ dnl First, define all of the version num
 dnl In particular, this allows the version macro to be used in AC_INIT
 
 dnl These first two version numbers are updated automatically on each release.
-m4_define([LIBARCHIVE_VERSION_S],[3.8.1])
-m4_define([LIBARCHIVE_VERSION_N],[3008001])
+m4_define([LIBARCHIVE_VERSION_S],[3.8.2])
+m4_define([LIBARCHIVE_VERSION_N],[3008002])
 
 dnl bsdtar and bsdcpio versioning tracks libarchive
 m4_define([BSDTAR_VERSION_S],LIBARCHIVE_VERSION_S())
@@ -821,12 +821,15 @@ AC_FUNC_VPRINTF
 # To avoid necessity for including windows.h or special forward declaration
 # workarounds, we use 'void *' for 'struct SECURITY_ATTRIBUTES *'
 AC_CHECK_STDCALL_FUNC([CreateHardLinkA],[const char *, const char *, void *])
-AC_CHECK_FUNCS([arc4random_buf chflags chown chroot ctime_r])
+AC_CHECK_FUNCS([arc4random_buf chflags chown chroot])
+AC_CHECK_FUNCS([closefrom close_range ctime_r])
 AC_CHECK_FUNCS([fchdir fchflags fchmod fchown fcntl fdopendir fnmatch fork])
 AC_CHECK_FUNCS([fstat fstatat fstatfs fstatvfs ftruncate])
 AC_CHECK_FUNCS([futimens futimes futimesat])
-AC_CHECK_FUNCS([geteuid getline getpid getgrgid_r getgrnam_r])
-AC_CHECK_FUNCS([getpwnam_r getpwuid_r getvfsbyname gmtime_r])
+AC_CHECK_FUNCS([getegid geteuid getline getpid getresgid getresuid])
+AC_CHECK_FUNCS([getgrgid_r getgrnam_r getpwnam_r getpwuid_r])
+AC_CHECK_FUNCS([getvfsbyname gmtime_r])
+AC_CHECK_FUNCS([issetugid])
 AC_CHECK_FUNCS([lchflags lchmod lchown link linkat localtime_r lstat lutimes])
 AC_CHECK_FUNCS([mbrtowc memmove memset])
 AC_CHECK_FUNCS([mkdir mkfifo mknod mkstemp])
@@ -881,14 +884,6 @@ AC_CHECK_TYPES(struct statfs,,,
        #include <sys/mount.h>
        ])
 
-# There are several variants of readdir_r around; we only
-# accept the POSIX-compliant version.
-AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([[#include <dirent.h>]],
-                  [[DIR *dir; struct dirent e, *r;
-                   return(readdir_r(dir, &e, &r));]])],
- [AC_DEFINE(HAVE_READDIR_R,1,[Define to 1 if you have a POSIX compatible readdir_r])]
-)
 # dirfd can be either a function or a macro.
 AC_LINK_IFELSE(
  [AC_LANG_PROGRAM([[#include <dirent.h>

Index: pkgsrc/archivers/libarchive/files/build/version
diff -u pkgsrc/archivers/libarchive/files/build/version:1.16 pkgsrc/archivers/libarchive/files/build/version:1.17
--- pkgsrc/archivers/libarchive/files/build/version:1.16        Tue Jul  1 15:14:42 2025
+++ pkgsrc/archivers/libarchive/files/build/version     Sun Nov  2 08:52:11 2025
@@ -1 +1 @@
-3008001
+3008002

Index: pkgsrc/archivers/libarchive/files/build/cmake/config.h.in
diff -u pkgsrc/archivers/libarchive/files/build/cmake/config.h.in:1.15 pkgsrc/archivers/libarchive/files/build/cmake/config.h.in:1.16
--- pkgsrc/archivers/libarchive/files/build/cmake/config.h.in:1.15      Wed May 21 15:25:48 2025
+++ pkgsrc/archivers/libarchive/files/build/cmake/config.h.in   Sun Nov  2 08:52:11 2025
@@ -405,6 +405,12 @@ typedef uint64_t uintmax_t;
 /* Define to 1 if you have the `chroot' function. */
 #cmakedefine HAVE_CHROOT 1
 
+/* Define to 1 if you have the `closefrom' function. */
+#cmakedefine HAVE_CLOSEFROM 1
+
+/* Define to 1 if you have the `close_range' function. */
+#cmakedefine HAVE_CLOSE_RANGE 1
+
 /* Define to 1 if you have the <copyfile.h> header file. */
 #cmakedefine HAVE_COPYFILE_H 1
 
@@ -970,9 +976,6 @@ typedef uint64_t uintmax_t;
 /* Define to 1 if you have the <pwd.h> header file. */
 #cmakedefine HAVE_PWD_H 1
 
-/* Define to 1 if you have the `readdir_r' function. */
-#cmakedefine HAVE_READDIR_R 1
-
 /* Define to 1 if you have the `readlink' function. */
 #cmakedefine HAVE_READLINK 1
 

Index: pkgsrc/archivers/libarchive/files/cat/bsdcat.c
diff -u pkgsrc/archivers/libarchive/files/cat/bsdcat.c:1.4 pkgsrc/archivers/libarchive/files/cat/bsdcat.c:1.5
--- pkgsrc/archivers/libarchive/files/cat/bsdcat.c:1.4  Sat Oct 19 05:39:54 2024
+++ pkgsrc/archivers/libarchive/files/cat/bsdcat.c      Sun Nov  2 08:52:11 2025
@@ -7,6 +7,9 @@
 
 #include "bsdcat_platform.h"
 
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
 #include <stdio.h>
 #ifdef HAVE_STDLIB_H
 #include <stdlib.h>
@@ -22,7 +25,7 @@
 #include <archive_entry.h>
 
 #include "bsdcat.h"
-#include "err.h"
+#include "lafe_err.h"
 
 #define        BYTES_PER_BLOCK (20*512)
 
@@ -105,6 +108,16 @@ main(int argc, char **argv)
        bsdcat = &bsdcat_storage;
        memset(bsdcat, 0, sizeof(*bsdcat));
 
+#if defined(HAVE_SIGACTION) && defined(SIGCHLD)
+       { /* Do not ignore SIGCHLD. */
+               struct sigaction sa;
+               sa.sa_handler = SIG_DFL;
+               sigemptyset(&sa.sa_mask);
+               sa.sa_flags = 0;
+               sigaction(SIGCHLD, &sa, NULL);
+       }
+#endif
+
        lafe_setprogname(*argv, "bsdcat");
 
        bsdcat->argv = argv;

Index: pkgsrc/archivers/libarchive/files/contrib/android/Android.mk
diff -u pkgsrc/archivers/libarchive/files/contrib/android/Android.mk:1.4 pkgsrc/archivers/libarchive/files/contrib/android/Android.mk:1.5
--- pkgsrc/archivers/libarchive/files/contrib/android/Android.mk:1.4    Wed May 21 15:25:48 2025
+++ pkgsrc/archivers/libarchive/files/contrib/android/Android.mk        Sun Nov  2 08:52:12 2025
@@ -151,7 +151,7 @@ else
 libarchive_host_src_files :=
 endif
 
-libarchive_fe_src_files :=  libarchive_fe/err.c \
+libarchive_fe_src_files :=  libarchive_fe/lafe_err.c \
                                                        libarchive_fe/line_reader.c \
                                                        libarchive_fe/passphrase.c
 

Index: pkgsrc/archivers/libarchive/files/cpio/CMakeLists.txt
diff -u pkgsrc/archivers/libarchive/files/cpio/CMakeLists.txt:1.5 pkgsrc/archivers/libarchive/files/cpio/CMakeLists.txt:1.6
--- pkgsrc/archivers/libarchive/files/cpio/CMakeLists.txt:1.5   Wed May 21 15:25:48 2025
+++ pkgsrc/archivers/libarchive/files/cpio/CMakeLists.txt       Sun Nov  2 08:52:12 2025
@@ -13,8 +13,8 @@ IF(ENABLE_CPIO)
     cpio.c
     cpio.h
     cpio_platform.h
-    ../libarchive_fe/err.c
-    ../libarchive_fe/err.h
+    ../libarchive_fe/lafe_err.c
+    ../libarchive_fe/lafe_err.h
     ../libarchive_fe/lafe_platform.h
     ../libarchive_fe/line_reader.c
     ../libarchive_fe/line_reader.h

Index: pkgsrc/archivers/libarchive/files/cpio/cmdline.c
diff -u pkgsrc/archivers/libarchive/files/cpio/cmdline.c:1.12 pkgsrc/archivers/libarchive/files/cpio/cmdline.c:1.13
--- pkgsrc/archivers/libarchive/files/cpio/cmdline.c:1.12       Sat Oct 19 05:39:54 2024
+++ pkgsrc/archivers/libarchive/files/cpio/cmdline.c    Sun Nov  2 08:52:12 2025
@@ -26,7 +26,7 @@
 #endif
 
 #include "cpio.h"
-#include "err.h"
+#include "lafe_err.h"
 
 /*
  * Short options for cpio.  Please keep this sorted.

Index: pkgsrc/archivers/libarchive/files/cpio/cpio.c
diff -u pkgsrc/archivers/libarchive/files/cpio/cpio.c:1.15 pkgsrc/archivers/libarchive/files/cpio/cpio.c:1.16
--- pkgsrc/archivers/libarchive/files/cpio/cpio.c:1.15  Mon Apr 28 10:31:33 2025
+++ pkgsrc/archivers/libarchive/files/cpio/cpio.c       Sun Nov  2 08:52:12 2025
@@ -60,7 +60,7 @@
 #endif
 
 #include "cpio.h"
-#include "err.h"
+#include "lafe_err.h"
 #include "line_reader.h"
 #include "passphrase.h"
 
@@ -124,13 +124,21 @@ main(int argc, char *argv[])
        cpio->buff_size = sizeof(buff);
 
 
-#if defined(HAVE_SIGACTION) && defined(SIGPIPE)
-       { /* Ignore SIGPIPE signals. */
+#if defined(HAVE_SIGACTION)
+       {
                struct sigaction sa;
                sigemptyset(&sa.sa_mask);
                sa.sa_flags = 0;
+#ifdef SIGPIPE
+               /* Ignore SIGPIPE signals. */
                sa.sa_handler = SIG_IGN;
                sigaction(SIGPIPE, &sa, NULL);
+#endif
+#ifdef SIGCHLD
+               /* Do not ignore SIGCHLD. */
+               sa.sa_handler = SIG_DFL;
+               sigaction(SIGCHLD, &sa, NULL);
+#endif
        }
 #endif
 

Index: pkgsrc/archivers/libarchive/files/cpio/cpio_windows.c
diff -u pkgsrc/archivers/libarchive/files/cpio/cpio_windows.c:1.6 pkgsrc/archivers/libarchive/files/cpio/cpio_windows.c:1.7
--- pkgsrc/archivers/libarchive/files/cpio/cpio_windows.c:1.6   Mon Apr 28 10:31:33 2025
+++ pkgsrc/archivers/libarchive/files/cpio/cpio_windows.c       Sun Nov  2 08:52:12 2025
@@ -24,7 +24,7 @@
 #include <sddl.h>
 
 #include "cpio.h"
-#include "err.h"
+#include "lafe_err.h"
 
 #define EPOC_TIME      (116444736000000000ULL)
 

Index: pkgsrc/archivers/libarchive/files/cpio/test/CMakeLists.txt
diff -u pkgsrc/archivers/libarchive/files/cpio/test/CMakeLists.txt:1.9 pkgsrc/archivers/libarchive/files/cpio/test/CMakeLists.txt:1.10
--- pkgsrc/archivers/libarchive/files/cpio/test/CMakeLists.txt:1.9      Mon Apr 28 10:31:33 2025
+++ pkgsrc/archivers/libarchive/files/cpio/test/CMakeLists.txt  Sun Nov  2 08:52:12 2025
@@ -9,7 +9,7 @@
 IF(ENABLE_CPIO AND ENABLE_TEST)
   SET(bsdcpio_test_SOURCES
     ../cmdline.c
-    ../../libarchive_fe/err.c
+    ../../libarchive_fe/lafe_err.c
     ../../test_utils/test_utils.c
     ../../test_utils/test_main.c
     test.h
Index: pkgsrc/archivers/libarchive/files/cpio/test/test_owner_parse.c
diff -u pkgsrc/archivers/libarchive/files/cpio/test/test_owner_parse.c:1.9 pkgsrc/archivers/libarchive/files/cpio/test/test_owner_parse.c:1.10
--- pkgsrc/archivers/libarchive/files/cpio/test/test_owner_parse.c:1.9  Sat Oct 19 05:39:55 2024
+++ pkgsrc/archivers/libarchive/files/cpio/test/test_owner_parse.c      Sun Nov  2 08:52:12 2025
@@ -7,7 +7,7 @@
 #include "test.h"
 
 #include "../cpio.h"
-#include "err.h"
+#include "lafe_err.h"
 
 #if !defined(_WIN32)
 #define ROOT "root"

Index: pkgsrc/archivers/libarchive/files/doc/html/archive_entry.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_entry.3.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/archive_entry.3.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/archive_entry.3.html:1.16        Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_entry.3.html     Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:38 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:44 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_read.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_read.3.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/archive_read.3.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/archive_read.3.html:1.16 Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_read.3.html      Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_read_disk.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_read_disk.3.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/archive_read_disk.3.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/archive_read_disk.3.html:1.16    Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_read_disk.3.html Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_util.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_util.3.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/archive_util.3.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/archive_util.3.html:1.16 Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_util.3.html      Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_write.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_write.3.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/archive_write.3.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/archive_write.3.html:1.16        Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_write.3.html     Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_write_disk.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_write_disk.3.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/archive_write_disk.3.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/archive_write_disk.3.html:1.16   Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_write_disk.3.html        Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/bsdcpio.1.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/bsdcpio.1.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/bsdcpio.1.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/bsdcpio.1.html:1.16      Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/bsdcpio.1.html   Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:41 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:47 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/bsdtar.1.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/bsdtar.1.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/bsdtar.1.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/bsdtar.1.html:1.16       Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/bsdtar.1.html    Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:41 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:47 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/cpio.5.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/cpio.5.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/cpio.5.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/cpio.5.html:1.16 Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/cpio.5.html      Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:41 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/libarchive-formats.5.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/libarchive-formats.5.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/libarchive-formats.5.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/libarchive-formats.5.html:1.16   Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/libarchive-formats.5.html        Sun Nov  2 08:52:13 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:41 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:47 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/libarchive.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/libarchive.3.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/libarchive.3.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/libarchive.3.html:1.16   Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/libarchive.3.html        Sun Nov  2 08:52:13 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:41 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:47 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/libarchive_internals.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/libarchive_internals.3.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/libarchive_internals.3.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/libarchive_internals.3.html:1.16 Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/libarchive_internals.3.html      Sun Nov  2 08:52:13 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:41 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:47 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/mtree.5.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/mtree.5.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/mtree.5.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/mtree.5.html:1.16        Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/mtree.5.html     Sun Nov  2 08:52:13 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:41 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:47 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/tar.5.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/tar.5.html:1.16 pkgsrc/archivers/libarchive/files/doc/html/tar.5.html:1.17
--- pkgsrc/archivers/libarchive/files/doc/html/tar.5.html:1.16  Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/tar.5.html       Sun Nov  2 08:52:13 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:41 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:47 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>

Index: pkgsrc/archivers/libarchive/files/doc/html/archive_entry_acl.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_entry_acl.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_entry_acl.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_entry_acl.3.html:1.15    Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_entry_acl.3.html Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:38 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:44 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_entry_linkify.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_entry_linkify.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_entry_linkify.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_entry_linkify.3.html:1.15        Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_entry_linkify.3.html     Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:38 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:44 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_entry_paths.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_entry_paths.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_entry_paths.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_entry_paths.3.html:1.15  Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_entry_paths.3.html       Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:44 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
@@ -79,7 +79,7 @@ manipulating path names in archive entry
 
 
 <p style="margin-left:14%;"><b>archive_entry_copy_hardlink_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
-<i>const</i>, <i>wchar_t</i>, <i>*path&quot;</i>);</p>
+<i>const&nbsp;wchar_t&nbsp;*path</i>);</p>
 
 <p style="margin-left:9%; margin-top: 1em"><i>int</i></p>
 
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_entry_perms.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_entry_perms.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_entry_perms.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_entry_perms.3.html:1.15  Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_entry_perms.3.html       Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_entry_stat.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_entry_stat.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_entry_stat.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_entry_stat.3.html:1.15   Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_entry_stat.3.html        Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_entry_time.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_entry_time.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_entry_time.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_entry_time.3.html:1.15   Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_entry_time.3.html        Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_read_data.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_read_data.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_read_data.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_read_data.3.html:1.15    Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_read_data.3.html Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_read_extract.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_read_extract.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_read_extract.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_read_extract.3.html:1.15 Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_read_extract.3.html      Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_read_filter.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_read_filter.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_read_filter.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_read_filter.3.html:1.15  Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_read_filter.3.html       Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_read_format.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_read_format.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_read_format.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_read_format.3.html:1.15  Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_read_format.3.html       Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_read_free.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_read_free.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_read_free.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_read_free.3.html:1.15    Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_read_free.3.html Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_read_header.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_read_header.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_read_header.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_read_header.3.html:1.15  Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_read_header.3.html       Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_read_new.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_read_new.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_read_new.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_read_new.3.html:1.15     Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_read_new.3.html  Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_read_open.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_read_open.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_read_open.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_read_open.3.html:1.15    Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_read_open.3.html Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_read_set_options.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_read_set_options.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_read_set_options.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_read_set_options.3.html:1.15     Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_read_set_options.3.html  Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_write_blocksize.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_write_blocksize.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_write_blocksize.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_write_blocksize.3.html:1.15      Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_write_blocksize.3.html   Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_write_data.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_write_data.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_write_data.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_write_data.3.html:1.15   Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_write_data.3.html        Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_write_filter.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_write_filter.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_write_filter.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_write_filter.3.html:1.15 Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_write_filter.3.html      Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_write_finish_entry.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_write_finish_entry.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_write_finish_entry.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_write_finish_entry.3.html:1.15   Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_write_finish_entry.3.html        Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_write_format.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_write_format.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_write_format.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_write_format.3.html:1.15 Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_write_format.3.html      Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_write_free.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_write_free.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_write_free.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_write_free.3.html:1.15   Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_write_free.3.html        Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_write_header.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_write_header.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_write_header.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_write_header.3.html:1.15 Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_write_header.3.html      Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_write_new.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_write_new.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_write_new.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_write_new.3.html:1.15    Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_write_new.3.html Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_write_open.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_write_open.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_write_open.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_write_open.3.html:1.15   Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_write_open.3.html        Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_write_set_options.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_write_set_options.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/archive_write_set_options.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/archive_write_set_options.3.html:1.15    Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_write_set_options.3.html Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/libarchive_changes.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/libarchive_changes.3.html:1.15 pkgsrc/archivers/libarchive/files/doc/html/libarchive_changes.3.html:1.16
--- pkgsrc/archivers/libarchive/files/doc/html/libarchive_changes.3.html:1.15   Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/libarchive_changes.3.html        Sun Nov  2 08:52:13 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:41 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:47 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>

Index: pkgsrc/archivers/libarchive/files/doc/html/archive_entry_misc.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_entry_misc.3.html:1.10 pkgsrc/archivers/libarchive/files/doc/html/archive_entry_misc.3.html:1.11
--- pkgsrc/archivers/libarchive/files/doc/html/archive_entry_misc.3.html:1.10   Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_entry_misc.3.html        Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:44 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>

Index: pkgsrc/archivers/libarchive/files/doc/html/archive_read_add_passphrase.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_read_add_passphrase.3.html:1.12 pkgsrc/archivers/libarchive/files/doc/html/archive_read_add_passphrase.3.html:1.13
--- pkgsrc/archivers/libarchive/files/doc/html/archive_read_add_passphrase.3.html:1.12  Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_read_add_passphrase.3.html       Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:39 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:45 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
Index: pkgsrc/archivers/libarchive/files/doc/html/archive_write_set_passphrase.3.html
diff -u pkgsrc/archivers/libarchive/files/doc/html/archive_write_set_passphrase.3.html:1.12 pkgsrc/archivers/libarchive/files/doc/html/archive_write_set_passphrase.3.html:1.13
--- pkgsrc/archivers/libarchive/files/doc/html/archive_write_set_passphrase.3.html:1.12 Tue Jul  1 15:14:43 2025
+++ pkgsrc/archivers/libarchive/files/doc/html/archive_write_set_passphrase.3.html      Sun Nov  2 08:52:12 2025
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.23.0 -->
-<!-- CreationDate: Sun Jun  1 19:29:41 2025 -->
+<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd";>
 <html>

Index: pkgsrc/archivers/libarchive/files/doc/man/archive_entry_paths.3
diff -u pkgsrc/archivers/libarchive/files/doc/man/archive_entry_paths.3:1.4 pkgsrc/archivers/libarchive/files/doc/man/archive_entry_paths.3:1.5
--- pkgsrc/archivers/libarchive/files/doc/man/archive_entry_paths.3:1.4 Tue May 26 09:16:41 2020
+++ pkgsrc/archivers/libarchive/files/doc/man/archive_entry_paths.3     Sun Nov  2 08:52:13 2025
@@ -51,7 +51,7 @@ Streaming Archive Library (libarchive, -
 .br
 \fIvoid\fP
 .br
-\fB\%archive_entry_copy_hardlink_w\fP(\fI\%struct\ archive_entry\ *a\ \fP, \fI\%const\fP, \fI\%wchar_t\fP, \fI\%*path"\fP);
+\fB\%archive_entry_copy_hardlink_w\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ wchar_t\ *path\fP);
 .br
 \fIint\fP
 .br

Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_read.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_disk.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_util.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_write.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_disk.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/bsdcpio.1.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/bsdtar.1.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/cpio.5.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/libarchive-formats.5.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/libarchive.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/libarchive_internals.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/mtree.5.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/tar.5.pdf
Binary files are different

Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_acl.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_linkify.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_paths.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_perms.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_stat.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_time.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_data.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_extract.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_filter.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_format.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_free.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_header.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_new.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_open.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_set_options.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_blocksize.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_data.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_filter.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_finish_entry.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_format.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_free.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_header.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_new.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_open.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_set_options.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/libarchive_changes.3.pdf
Binary files are different

Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_entry_misc.3.pdf
Binary files are different

Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_read_add_passphrase.3.pdf
Binary files are different
Index: pkgsrc/archivers/libarchive/files/doc/pdf/archive_write_set_passphrase.3.pdf
Binary files are different

Index: pkgsrc/archivers/libarchive/files/doc/text/archive_entry_paths.3.txt
diff -u pkgsrc/archivers/libarchive/files/doc/text/archive_entry_paths.3.txt:1.7 pkgsrc/archivers/libarchive/files/doc/text/archive_entry_paths.3.txt:1.8
--- pkgsrc/archivers/libarchive/files/doc/text/archive_entry_paths.3.txt:1.7    Sat Oct 19 05:39:57 2024
+++ pkgsrc/archivers/libarchive/files/doc/text/archive_entry_paths.3.txt        Sun Nov  2 08:52:14 2025
@@ -34,8 +34,8 @@
        1marchive_entry_copy_hardlink22m(4mstruct24m 4marchive_entry24m 4m*a24m, 4mconst24m 4mchar24m 4m*path24m);
 
        4mvoid0m
-       1marchive_entry_copy_hardlink_w22m(4mstruct24m 4marchive_entry24m 4m*a24m, 4mconst24m,  4mwchar_t24m,
-          4m*path"24m);
+       1marchive_entry_copy_hardlink_w22m(4mstruct24m        4marchive_entry24m          4m*a24m,
+          4mconst24m 4mwchar_t24m 4m*path24m);
 
        4mint0m
        1marchive_entry_update_hardlink_utf822m(4mstruct24m      4marchive_entry24m       4m*a24m,

Index: pkgsrc/archivers/libarchive/files/doc/wiki/ManPageArchiveEntryPaths3.wiki
diff -u pkgsrc/archivers/libarchive/files/doc/wiki/ManPageArchiveEntryPaths3.wiki:1.7 pkgsrc/archivers/libarchive/files/doc/wiki/ManPageArchiveEntryPaths3.wiki:1.8
--- pkgsrc/archivers/libarchive/files/doc/wiki/ManPageArchiveEntryPaths3.wiki:1.7       Thu Jan 18 18:00:16 2024
+++ pkgsrc/archivers/libarchive/files/doc/wiki/ManPageArchiveEntryPaths3.wiki   Sun Nov  2 08:52:14 2025
@@ -48,7 +48,7 @@ Streaming Archive Library (libarchive, -
 <br> 
 ''void'' 
 <br> 
-'''archive_entry_copy_hardlink_w'''(''struct archive_entry *a '', ''const'', ''wchar_t'', ''*path"''); 
+'''archive_entry_copy_hardlink_w'''(''struct archive_entry *a'', ''const wchar_t *path''); 
 <br> 
 ''int'' 
 <br> 

Index: pkgsrc/archivers/libarchive/files/libarchive/CMakeLists.txt
diff -u pkgsrc/archivers/libarchive/files/libarchive/CMakeLists.txt:1.13 pkgsrc/archivers/libarchive/files/libarchive/CMakeLists.txt:1.14
--- pkgsrc/archivers/libarchive/files/libarchive/CMakeLists.txt:1.13    Tue Jul  1 15:14:44 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/CMakeLists.txt Sun Nov  2 08:52:14 2025
@@ -52,6 +52,7 @@ SET(libarchive_SOURCES
   archive_pathmatch.h
   archive_platform.h
   archive_platform_acl.h
+  archive_platform_stat.h
   archive_platform_xattr.h
   archive_ppmd_private.h
   archive_ppmd8.c
@@ -253,6 +254,9 @@ IF(BUILD_SHARED_LIBS)
                         SOVERSION ${SOVERSION}
                         MACHO_COMPATIBILITY_VERSION ${MACHO_COMPATIBILITY_VERSION}
                         MACHO_CURRENT_VERSION ${MACHO_CURRENT_VERSION})
+  IF(WIN32 AND MSVC AND MSVC_USE_STATIC_CRT)
+    SET_PROPERTY(TARGET archive PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+  ENDIF(WIN32 AND MSVC AND MSVC_USE_STATIC_CRT)
 ENDIF(BUILD_SHARED_LIBS)
 
 # archive_static is a static library
@@ -261,15 +265,14 @@ TARGET_INCLUDE_DIRECTORIES(archive_stati
 TARGET_LINK_LIBRARIES(archive_static ${ADDITIONAL_LIBS})
 SET_TARGET_PROPERTIES(archive_static PROPERTIES COMPILE_DEFINITIONS
   LIBARCHIVE_STATIC)
+IF(WIN32 AND MSVC AND MSVC_USE_STATIC_CRT)
+  SET_PROPERTY(TARGET archive_static PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+ENDIF(WIN32 AND MSVC AND MSVC_USE_STATIC_CRT)
 # On Posix systems, libarchive.so and libarchive.a can co-exist.
 IF(NOT WIN32 OR CYGWIN OR NOT BUILD_SHARED_LIBS)
   SET_TARGET_PROPERTIES(archive_static PROPERTIES OUTPUT_NAME archive)
 ENDIF(NOT WIN32 OR CYGWIN OR NOT BUILD_SHARED_LIBS)
 
-if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
-    set(CMAKE_INSTALL_LIBDIR "lib")
-endif()
-
 IF(ENABLE_INSTALL)
   # How to install the libraries
   IF(BUILD_SHARED_LIBS)
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_7zip.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_7zip.c:1.13 pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_7zip.c:1.14
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_7zip.c:1.13        Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_7zip.c     Sun Nov  2 08:52:14 2025
@@ -80,7 +80,7 @@
 /*
  * ELF format
  */
-#define ELF_HDR_MIN_LEN 0x34
+#define ELF_HDR_MIN_LEN 0x3f
 #define ELF_HDR_EI_CLASS_OFFSET 0x04
 #define ELF_HDR_EI_DATA_OFFSET 0x05
 
@@ -811,6 +811,8 @@ find_elf_data_sec(struct archive_read *a
                        strtab_size = (*dec32)(
                            h + e_shstrndx * e_shentsize + 0x14);
                }
+               if (strtab_size < 6 || strtab_size > SIZE_MAX)
+                       break;
 
                /*
                 * Read the STRTAB section to find the .data offset
@@ -1391,7 +1393,8 @@ init_decompression(struct archive_read *
                 * size to liblzma when using lzma_raw_decoder() liblzma
                 * could correctly deal with BCJ+LZMA. But unfortunately
                 * there is no way to do that.
-                * Discussion about this can be found at XZ Utils forum.
+                *
+                * Reference: https://web.archive.org/web/20240405171610/https://www.mail-archive.com/xz-devel%tukaani.org@localhost/msg00373.html
                 */
                if (coder2 != NULL) {
                        zip->codec2 = coder2->codec;
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write.c:1.13 pkgsrc/archivers/libarchive/files/libarchive/archive_write.c:1.14
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write.c:1.13   Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write.c        Sun Nov  2 08:52:14 2025
@@ -360,7 +360,6 @@ archive_write_client_open(struct archive
        struct archive_none *state;
        void *buffer;
        size_t buffer_size;
-       int ret;
 
        f->bytes_per_block = archive_write_get_bytes_per_block(f->archive);
        f->bytes_in_last_block =
@@ -385,13 +384,7 @@ archive_write_client_open(struct archive
 
        if (a->client_opener == NULL)
                return (ARCHIVE_OK);
-       ret = a->client_opener(f->archive, a->client_data);
-       if (ret != ARCHIVE_OK) {
-               free(state->buffer);
-               free(state);
-               f->data = NULL;
-       }
-       return (ret);
+       return (a->client_opener(f->archive, a->client_data));
 }
 
 static int
@@ -480,6 +473,7 @@ static int
 archive_write_client_free(struct archive_write_filter *f)
 {
        struct archive_write *a = (struct archive_write *)f->archive;
+       struct archive_none *state = (struct archive_none *)f->data;
 
        if (a->client_freer)
                (*a->client_freer)(&a->archive, a->client_data);
@@ -492,6 +486,13 @@ archive_write_client_free(struct archive
                a->passphrase = NULL;
        }
 
+       /* Free state. */
+       if (state != NULL) {
+               free(state->buffer);
+               free(state);
+               f->data = NULL;
+       }
+
        return (ARCHIVE_OK);
 }
 
@@ -548,8 +549,6 @@ archive_write_client_close(struct archiv
        }
        if (a->client_closer)
                (*a->client_closer)(&a->archive, a->client_data);
-       free(state->buffer);
-       free(state);
 
        /* Clear the close handler myself not to be called again. */
        f->state = ARCHIVE_WRITE_FILTER_STATE_CLOSED;
@@ -807,7 +806,10 @@ _archive_write_finish_entry(struct archi
        if (a->archive.state & ARCHIVE_STATE_DATA
            && a->format_finish_entry != NULL)
                ret = (a->format_finish_entry)(a);
-       a->archive.state = ARCHIVE_STATE_HEADER;
+       if (ret == ARCHIVE_FATAL)
+               a->archive.state = ARCHIVE_STATE_FATAL;
+       else
+               a->archive.state = ARCHIVE_STATE_HEADER;
        return (ret);
 }
 
@@ -819,6 +821,7 @@ _archive_write_data(struct archive *_a, 
 {
        struct archive_write *a = (struct archive_write *)_a;
        const size_t max_write = INT_MAX;
+       int ret;
 
        archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC,
            ARCHIVE_STATE_DATA, "archive_write_data");
@@ -826,7 +829,10 @@ _archive_write_data(struct archive *_a, 
        if (s > max_write)
                s = max_write;
        archive_clear_error(&a->archive);
-       return ((a->format_write_data)(a, buff, s));
+       ret = (a->format_write_data)(a, buff, s);
+       if (ret == ARCHIVE_FATAL)
+               a->archive.state = ARCHIVE_STATE_FATAL;
+       return (ret);
 }
 
 static struct archive_write_filter *

Index: pkgsrc/archivers/libarchive/files/libarchive/archive.h
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive.h:1.22 pkgsrc/archivers/libarchive/files/libarchive/archive.h:1.23
--- pkgsrc/archivers/libarchive/files/libarchive/archive.h:1.22 Tue Jul  1 15:14:44 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive.h      Sun Nov  2 08:52:14 2025
@@ -34,7 +34,7 @@
  * assert that ARCHIVE_VERSION_NUMBER >= 2012108.
  */
 /* Note: Compiler will complain if this does not match archive_entry.h! */
-#define        ARCHIVE_VERSION_NUMBER 3008001
+#define        ARCHIVE_VERSION_NUMBER 3008002
 
 #include <sys/stat.h>
 #include <stddef.h>  /* for wchar_t */
@@ -177,7 +177,7 @@ __LA_DECL int               archive_version_number(vo
 /*
  * Textual name/version of the library, useful for version displays.
  */
-#define        ARCHIVE_VERSION_ONLY_STRING "3.8.1"
+#define        ARCHIVE_VERSION_ONLY_STRING "3.8.2"
 #define        ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
 __LA_DECL const char * archive_version_string(void);
 

Index: pkgsrc/archivers/libarchive/files/libarchive/archive_acl.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_acl.c:1.9 pkgsrc/archivers/libarchive/files/libarchive/archive_acl.c:1.10
--- pkgsrc/archivers/libarchive/files/libarchive/archive_acl.c:1.9      Wed May 21 15:25:50 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_acl.c  Sun Nov  2 08:52:14 2025
@@ -270,6 +270,19 @@ acl_new_entry(struct archive_acl *acl,
 {
        struct archive_acl_entry *ap, *aq;
 
+       /* Reject an invalid type */
+       switch (type) {
+       case ARCHIVE_ENTRY_ACL_TYPE_ACCESS:
+       case ARCHIVE_ENTRY_ACL_TYPE_DEFAULT:
+       case ARCHIVE_ENTRY_ACL_TYPE_ALLOW:
+       case ARCHIVE_ENTRY_ACL_TYPE_DENY:
+       case ARCHIVE_ENTRY_ACL_TYPE_AUDIT:
+       case ARCHIVE_ENTRY_ACL_TYPE_ALARM:
+               break;
+       default:
+               return (NULL);
+       }
+
        /* Type argument must be a valid NFS4 or POSIX.1e type.
         * The type must agree with anything already set and
         * the permset must be compatible. */
@@ -822,6 +835,9 @@ append_entry_w(wchar_t **wp, const wchar
                wname = NULL;
                id = -1;
                break;
+       default:
+               **wp = '\0';
+               break;
        }
        *wp += wcslen(*wp);
        *(*wp)++ = L':';
@@ -878,6 +894,7 @@ append_entry_w(wchar_t **wp, const wchar
                        wcscpy(*wp, L"alarm");
                        break;
                default:
+                       *(*wp) = L'\0';
                        break;
                }
                *wp += wcslen(*wp);
@@ -1057,6 +1074,9 @@ append_entry(char **p, const char *prefi
                name = NULL;
                id = -1;
                break;
+       default:
+               **p = '\0';
+               break;
        }
        *p += strlen(*p);
        *(*p)++ = ':';
@@ -1112,6 +1132,9 @@ append_entry(char **p, const char *prefi
                case ARCHIVE_ENTRY_ACL_TYPE_ALARM:
                        strcpy(*p, "alarm");
                        break;
+               default:
+                       *(*p) = '\0';
+                       break;
                }
                *p += strlen(*p);
        }
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_fd.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_fd.c:1.9 pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_fd.c:1.10
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_fd.c:1.9     Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_fd.c Sun Nov  2 08:52:14 2025
@@ -48,6 +48,7 @@
 #endif
 
 #include "archive.h"
+#include "archive_platform_stat.h"
 
 struct read_fd_data {
        int      fd;
@@ -65,12 +66,12 @@ static int64_t      file_skip(struct archive 
 int
 archive_read_open_fd(struct archive *a, int fd, size_t block_size)
 {
-       struct stat st;
+       la_seek_stat_t st;
        struct read_fd_data *mine;
        void *b;
 
        archive_clear_error(a);
-       if (fstat(fd, &st) != 0) {
+       if (la_seek_fstat(fd, &st) != 0) {
                archive_set_error(a, errno, "Can't stat fd %d", fd);
                return (ARCHIVE_FATAL);
        }
@@ -133,7 +134,7 @@ static int64_t
 file_skip(struct archive *a, void *client_data, int64_t request)
 {
        struct read_fd_data *mine = (struct read_fd_data *)client_data;
-       off_t skip = (off_t)request;
+       la_seek_t skip = (la_seek_t)request;
        int64_t old_offset, new_offset;
        int skip_bits = sizeof(skip) * 8 - 1;  /* off_t is a signed type. */
 
@@ -149,7 +150,8 @@ file_skip(struct archive *a, void *clien
        }
 
        /* Reduce 'skip' to the next smallest multiple of block_size */
-       skip = (off_t)(((int64_t)skip / mine->block_size) * mine->block_size);
+       skip = (la_seek_t)(((int64_t)skip / mine->block_size) * mine->block_size);
+
        if (skip == 0)
                return (0);
 
@@ -185,27 +187,28 @@ static int64_t
 file_seek(struct archive *a, void *client_data, int64_t request, int whence)
 {
        struct read_fd_data *mine = (struct read_fd_data *)client_data;
-       off_t seek = (off_t)request;
+       la_seek_t seek = (la_seek_t)request;
        int64_t r;
        int seek_bits = sizeof(seek) * 8 - 1;  /* off_t is a signed type. */
 
        /* We use off_t here because lseek() is declared that way. */
 
-       /* Reduce a request that would overflow the 'seek' variable. */
+       /* Do not perform a seek which cannot be fulfilled. */
        if (sizeof(request) > sizeof(seek)) {
                const int64_t max_seek =
                    (((int64_t)1 << (seek_bits - 1)) - 1) * 2 + 1;
                const int64_t min_seek = ~max_seek;
-               if (request > max_seek)
-                       seek = (off_t)max_seek;
-               else if (request < min_seek)
-                       seek = (off_t)min_seek;
+               if (request < min_seek || request > max_seek) {
+                       errno = EOVERFLOW;
+                       goto err;
+               }
        }
 
        r = lseek(mine->fd, seek, whence);
        if (r >= 0)
                return r;
 
+err:
        if (errno == ESPIPE) {
                archive_set_error(a, errno,
                    "A file descriptor(%d) is not seekable(PIPE)", mine->fd);
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_filename.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_filename.c:1.9 pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_filename.c:1.10
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_filename.c:1.9      Mon Apr 28 10:31:34 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_filename.c  Sun Nov  2 08:52:15 2025
@@ -108,6 +108,7 @@ open_filename(struct archive *a, int mbs
        else
                r = archive_mstring_copy_wcs(&mine->filename, filename);
        if (r < 0) {
+               free(mine);
                if (errno == ENOMEM) {
                        archive_set_error(a, ENOMEM, "No memory");
                        return (ARCHIVE_FATAL);
@@ -227,7 +228,7 @@ file_write(struct archive *a, void *clie
        mine = (struct write_file_data *)client_data;
        for (;;) {
                bytesWritten = write(mine->fd, buff, length);
-               if (bytesWritten <= 0) {
+               if (bytesWritten < 0) {
                        if (errno == EINTR)
                                continue;
                        archive_set_error(a, errno, "Write error");
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_xar.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_xar.c:1.9 pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_xar.c:1.10
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_xar.c:1.9     Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_xar.c Sun Nov  2 08:52:15 2025
@@ -689,7 +689,7 @@ write_to_temp(struct archive_write *a, c
                ws = write(xar->temp_fd, p, s);
                if (ws < 0) {
                        archive_set_error(&(a->archive), errno,
-                           "fwrite function failed");
+                           "write function failed");
                        return (ARCHIVE_FATAL);
                }
                s -= ws;
@@ -3418,8 +3418,8 @@ static int
 xml_writer_get_final_content_and_length(struct xml_writer *ctx,
     const char **out, size_t *size)
 {
-       *out = (const char*)ctx->bp->content;
-       *size = (size_t)ctx->bp->use;
+       *out = (const char*)xmlBufferContent(ctx->bp);
+       *size = (size_t)xmlBufferLength(ctx->bp);
        return (0);
 }
 

Index: pkgsrc/archivers/libarchive/files/libarchive/archive_check_magic.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_check_magic.c:1.7 pkgsrc/archivers/libarchive/files/libarchive/archive_check_magic.c:1.8
--- pkgsrc/archivers/libarchive/files/libarchive/archive_check_magic.c:1.7      Fri Apr 12 15:39:50 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_check_magic.c  Sun Nov  2 08:52:14 2025
@@ -30,6 +30,7 @@
 #endif
 
 #include <stdio.h>
+#include <errno.h>
 #ifdef HAVE_STDLIB_H
 #include <stdlib.h>
 #endif
@@ -54,8 +55,14 @@ errmsg(const char *m)
 
        while (s > 0) {
                written = write(2, m, s);
-               if (written <= 0)
+               if (written == 0)
                        return;
+               if (written < 0)
+               {
+                       if (errno == EINTR)
+                               continue;
+                       return;
+               }
                m += written;
                s -= written;
        }
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_cryptor.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_cryptor.c:1.7 pkgsrc/archivers/libarchive/files/libarchive/archive_cryptor.c:1.8
--- pkgsrc/archivers/libarchive/files/libarchive/archive_cryptor.c:1.7  Sat Oct 19 05:39:58 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_cryptor.c      Sun Nov  2 08:52:14 2025
@@ -151,7 +151,7 @@ pbkdf2_sha1(const char *pw, size_t pw_le
        (void)rounds; /* UNUSED */
        (void)derived_key; /* UNUSED */
        (void)derived_key_len; /* UNUSED */
-       return -1; /* UNSUPPORTED */
+       return CRYPTOR_STUB_FUNCTION; /* UNSUPPORTED */
 }
 
 #endif
@@ -439,14 +439,14 @@ aes_ctr_init(archive_crypto_ctx *ctx, co
        (void)ctx; /* UNUSED */
        (void)key; /* UNUSED */
        (void)key_len; /* UNUSED */
-       return -1;
+       return CRYPTOR_STUB_FUNCTION;
 }
 
 static int
 aes_ctr_encrypt_counter(archive_crypto_ctx *ctx)
 {
        (void)ctx; /* UNUSED */
-       return -1;
+       return CRYPTOR_STUB_FUNCTION;
 }
 
 static int
@@ -469,7 +469,7 @@ aes_ctr_update(archive_crypto_ctx *ctx, 
        (void)out; /* UNUSED */
        (void)out_len; /* UNUSED */
        aes_ctr_encrypt_counter(ctx); /* UNUSED */ /* Fix unused function warning */
-       return -1;
+       return CRYPTOR_STUB_FUNCTION;
 }
 
 #else
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_cryptor_private.h
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_cryptor_private.h:1.7 pkgsrc/archivers/libarchive/files/libarchive/archive_cryptor_private.h:1.8
--- pkgsrc/archivers/libarchive/files/libarchive/archive_cryptor_private.h:1.7  Tue Jul  1 15:14:44 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_cryptor_private.h      Sun Nov  2 08:52:14 2025
@@ -43,7 +43,7 @@ int __libarchive_cryptor_build_hack(void
 #ifdef __APPLE__
 # include <AvailabilityMacros.h>
 # if MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
-#  define ARCHIVE_CRYPTOR_USE_Apple_CommonCrypto
+#  define ARCHIVE_CRYPTOR_USE_Apple_CommonCrypto 1
 # endif
 #endif
 
@@ -144,9 +144,15 @@ typedef struct {
 
 #else
 
+#if defined(ARCHIVE_CRYPTO_MD5_WIN)    ||\
+       defined(ARCHIVE_CRYPTO_SHA1_WIN)   ||\
+       defined(ARCHIVE_CRYPTO_SHA256_WIN) ||\
+       defined(ARCHIVE_CRYPTO_SHA384_WIN) ||\
+       defined(ARCHIVE_CRYPTO_SHA512_WIN)
 #if defined(_WIN32) && !defined(__CYGWIN__) && !(defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA)
 #define ARCHIVE_CRYPTOR_USE_WINCRYPT 1
 #endif
+#endif
 
 #define AES_BLOCK_SIZE 16
 #define AES_MAX_KEY_SIZE 32
@@ -172,6 +178,9 @@ typedef int archive_crypto_ctx;
 #define archive_encrypto_aes_ctr_release(ctx) \
   __archive_cryptor.encrypto_aes_ctr_release(ctx)
 
+/* Stub return value if no encryption support exists. */
+#define CRYPTOR_STUB_FUNCTION  -2
+
 /* Minimal interface to cryptographic functionality for internal use in
  * libarchive */
 struct archive_cryptor
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_string_sprintf.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_string_sprintf.c:1.7 pkgsrc/archivers/libarchive/files/libarchive/archive_string_sprintf.c:1.8
--- pkgsrc/archivers/libarchive/files/libarchive/archive_string_sprintf.c:1.7   Tue Jul  1 15:14:44 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_string_sprintf.c       Sun Nov  2 08:52:14 2025
@@ -146,7 +146,7 @@ archive_string_vsprintf(struct archive_s
                        case 'z': s = va_arg(ap, ssize_t); break;
                        default:  s = va_arg(ap, int); break;
                        }
-                       append_int(as, s, 10);
+                       append_int(as, s, 10);
                        break;
                case 's':
                        switch(long_flag) {
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_bzip2.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_bzip2.c:1.7 pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_bzip2.c:1.8
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_bzip2.c:1.7   Sat Oct 19 05:39:59 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_bzip2.c       Sun Nov  2 08:52:14 2025
@@ -281,6 +281,10 @@ static int
 archive_compressor_bzip2_free(struct archive_write_filter *f)
 {
        struct private_data *data = (struct private_data *)f->data;
+
+       /* May already have been called, but not necessarily. */
+       (void)BZ2_bzCompressEnd(&(data->stream));
+
        free(data->compressed);
        free(data);
        f->data = NULL;
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_gzip.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_gzip.c:1.7 pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_gzip.c:1.8
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_gzip.c:1.7    Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_gzip.c        Sun Nov  2 08:52:14 2025
@@ -191,7 +191,8 @@ static int
 archive_compressor_gzip_open(struct archive_write_filter *f)
 {
        struct private_data *data = (struct private_data *)f->data;
-       int ret;
+       int ret = ARCHIVE_OK;
+       int init_success;
 
        if (data->compressed == NULL) {
                size_t bs = 65536, bpb;
@@ -221,44 +222,66 @@ archive_compressor_gzip_open(struct arch
        data->compressed[0] = 0x1f; /* GZip signature bytes */
        data->compressed[1] = 0x8b;
        data->compressed[2] = 0x08; /* "Deflate" compression */
-       data->compressed[3] = data->original_filename == NULL ? 0 : 0x8;
+       data->compressed[3] = 0x00; /* Flags */
        if (data->timestamp >= 0) {
                time_t t = time(NULL);
                data->compressed[4] = (uint8_t)(t)&0xff;  /* Timestamp */
                data->compressed[5] = (uint8_t)(t>>8)&0xff;
                data->compressed[6] = (uint8_t)(t>>16)&0xff;
                data->compressed[7] = (uint8_t)(t>>24)&0xff;
-       } else
+       } else {
                memset(&data->compressed[4], 0, 4);
-    if (data->compression_level == 9)
-           data->compressed[8] = 2;
-    else if(data->compression_level == 1)
-           data->compressed[8] = 4;
-    else
-           data->compressed[8] = 0;
+       }
+       if (data->compression_level == 9) {
+               data->compressed[8] = 2;
+       } else if(data->compression_level == 1) {
+               data->compressed[8] = 4;
+       } else {
+               data->compressed[8] = 0;
+       }
        data->compressed[9] = 3; /* OS=Unix */
        data->stream.next_out += 10;
        data->stream.avail_out -= 10;
 
        if (data->original_filename != NULL) {
-               strcpy((char*)data->compressed + 10, data->original_filename);
-               data->stream.next_out += strlen(data->original_filename) + 1;
-               data->stream.avail_out -= strlen(data->original_filename) + 1;
+               /* Limit "original filename" to 32k or the
+                * remaining space in the buffer, whichever is smaller.
+                */
+               int ofn_length = strlen(data->original_filename);
+               int ofn_max_length = 32768;
+               int ofn_space_available = data->compressed
+                       + data->compressed_buffer_size
+                       - data->stream.next_out
+                       - 1;
+               if (ofn_max_length > ofn_space_available) {
+                       ofn_max_length = ofn_space_available;
+               }
+               if (ofn_length < ofn_max_length) {
+                       data->compressed[3] |= 0x8;
+                       strcpy((char*)data->compressed + 10,
+                              data->original_filename);
+                       data->stream.next_out += ofn_length + 1;
+                       data->stream.avail_out -= ofn_length + 1;
+               } else {
+                       archive_set_error(f->archive, ARCHIVE_ERRNO_MISC,
+                                         "Gzip 'Original Filename' ignored because it is too long");
+                       ret = ARCHIVE_WARN;
+               }
        }
 
        f->write = archive_compressor_gzip_write;
 
        /* Initialize compression library. */
-       ret = deflateInit2(&(data->stream),
+       init_success = deflateInit2(&(data->stream),
            data->compression_level,
            Z_DEFLATED,
            -15 /* < 0 to suppress zlib header */,
            8,
            Z_DEFAULT_STRATEGY);
 
-       if (ret == Z_OK) {
+       if (init_success == Z_OK) {
                f->data = data;
-               return (ARCHIVE_OK);
+               return (ret);
        }
 
        /* Library setup failed: clean up. */
@@ -266,7 +289,7 @@ archive_compressor_gzip_open(struct arch
            "initializing compression library");
 
        /* Override the error message if we know what really went wrong. */
-       switch (ret) {
+       switch (init_success) {
        case Z_STREAM_ERROR:
                archive_set_error(f->archive, ARCHIVE_ERRNO_MISC,
                    "Internal error initializing "
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_fd.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_fd.c:1.7 pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_fd.c:1.8
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_fd.c:1.7    Sat Oct 19 05:39:59 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_fd.c        Sun Nov  2 08:52:14 2025
@@ -122,7 +122,7 @@ file_write(struct archive *a, void *clie
        mine = (struct write_fd_data *)client_data;
        for (;;) {
                bytesWritten = write(mine->fd, buff, length);
-               if (bytesWritten <= 0) {
+               if (bytesWritten < 0) {
                        if (errno == EINTR)
                                continue;
                        archive_set_error(a, errno, "Write error");
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_file.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_file.c:1.7 pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_file.c:1.8
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_file.c:1.7  Sat Oct 19 05:39:59 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write_open_file.c      Sun Nov  2 08:52:14 2025
@@ -85,16 +85,12 @@ file_write(struct archive *a, void *clie
        size_t  bytesWritten;
 
        mine = client_data;
-       for (;;) {
-               bytesWritten = fwrite(buff, 1, length, mine->f);
-               if (bytesWritten <= 0) {
-                       if (errno == EINTR)
-                               continue;
-                       archive_set_error(a, errno, "Write error");
-                       return (-1);
-               }
-               return (bytesWritten);
+       bytesWritten = fwrite(buff, 1, length, mine->f);
+       if (bytesWritten != length) {
+               archive_set_error(a, errno, "Write error");
+               return (-1);
        }
+       return (bytesWritten);
 }
 
 static int

Index: pkgsrc/archivers/libarchive/files/libarchive/archive_entry.h
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_entry.h:1.18 pkgsrc/archivers/libarchive/files/libarchive/archive_entry.h:1.19
--- pkgsrc/archivers/libarchive/files/libarchive/archive_entry.h:1.18   Tue Jul  1 15:14:44 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_entry.h        Sun Nov  2 08:52:14 2025
@@ -28,7 +28,7 @@
 #define        ARCHIVE_ENTRY_H_INCLUDED
 
 /* Note: Compiler will complain if this does not match archive.h! */
-#define        ARCHIVE_VERSION_NUMBER 3008001
+#define        ARCHIVE_VERSION_NUMBER 3008002
 
 /*
  * Note: archive_entry.h is for use outside of libarchive; the
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_disk_entry_from_file.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_disk_entry_from_file.c:1.18 pkgsrc/archivers/libarchive/files/libarchive/archive_read_disk_entry_from_file.c:1.19
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_disk_entry_from_file.c:1.18       Mon Apr 28 10:31:34 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_disk_entry_from_file.c    Sun Nov  2 08:52:14 2025
@@ -338,7 +338,7 @@ setup_mac_metadata(struct archive_read_d
        int ret = ARCHIVE_OK;
        void *buff = NULL;
        int have_attrs;
-       const char *name, *tempdir;
+       const char *name;
        struct archive_string tempfile;
 
        (void)fd; /* UNUSED */
@@ -357,13 +357,11 @@ setup_mac_metadata(struct archive_read_d
        if (have_attrs == 0)
                return (ARCHIVE_OK);
 
-       tempdir = NULL;
-       if (issetugid() == 0)
-               tempdir = getenv("TMPDIR");
-       if (tempdir == NULL)
-               tempdir = _PATH_TMP;
        archive_string_init(&tempfile);
-       archive_strcpy(&tempfile, tempdir);
+       if (__archive_get_tempdir(&tempfile) != ARCHIVE_OK) {
+               ret = ARCHIVE_WARN;
+               goto cleanup;
+       }
        archive_strcat(&tempfile, "tar.md.XXXXXX");
        tempfd = mkstemp(tempfile.s);
        if (tempfd < 0) {
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_tar.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_tar.c:1.18 pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_tar.c:1.19
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_tar.c:1.18 Tue Jul  1 15:14:44 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_tar.c      Sun Nov  2 08:52:14 2025
@@ -233,7 +233,7 @@ static int  tar_read_header(struct archiv
                    struct archive_entry *, int64_t *);
 static int     tohex(int c);
 static char    *url_decode(const char *, size_t);
-static void    tar_flush_unconsumed(struct archive_read *, int64_t *);
+static int     tar_flush_unconsumed(struct archive_read *, int64_t *);
 
 /* Sanity limits:  These numbers should be low enough to
  * prevent a maliciously-crafted archive from forcing us to
@@ -477,7 +477,7 @@ archive_read_format_tar_options(struct a
  * how much unconsumed data we have floating around, and to consume
  * anything outstanding since we're going to do read_aheads
  */
-static void
+static int
 tar_flush_unconsumed(struct archive_read *a, int64_t *unconsumed)
 {
        if (*unconsumed) {
@@ -490,9 +490,13 @@ tar_flush_unconsumed(struct archive_read
                        memset(data, 0xff, *unconsumed);
                }
 */
-               __archive_read_consume(a, *unconsumed);
+               int64_t consumed = __archive_read_consume(a, *unconsumed);
+               if (consumed != *unconsumed) {
+                       return (ARCHIVE_FATAL);
+               }
                *unconsumed = 0;
        }
+       return (ARCHIVE_OK);
 }
 
 /*
@@ -750,7 +754,9 @@ tar_read_header(struct archive_read *a, 
 
                /* Find the next valid header record. */
                while (1) {
-                       tar_flush_unconsumed(a, unconsumed);
+                       if (tar_flush_unconsumed(a, unconsumed) != ARCHIVE_OK) {
+                               return (ARCHIVE_FATAL);
+                       }
 
                        /* Read 512-byte header record */
                        h = __archive_read_ahead(a, 512, &bytes);
@@ -796,7 +802,9 @@ tar_read_header(struct archive_read *a, 
 
                        /* This is NOT a null block, so it must be a valid header. */
                        if (!checksum(a, h)) {
-                               tar_flush_unconsumed(a, unconsumed);
+                               if (tar_flush_unconsumed(a, unconsumed) != ARCHIVE_OK) {
+                                       return (ARCHIVE_FATAL);
+                               }
                                archive_set_error(&a->archive, EINVAL,
                                                  "Damaged tar archive (bad header checksum)");
                                /* If we've read some critical information (pax headers, etc)
@@ -1236,7 +1244,7 @@ header_volume(struct archive_read *a, st
 
        header = (const struct archive_entry_header_ustar *)h;
        size = tar_atol(header->size, sizeof(header->size));
-       if (size > (int64_t)pathname_limit) {
+       if (size < 0 || size > (int64_t)pathname_limit) {
                return (ARCHIVE_FATAL);
        }
        to_consume = ((size + 511) & ~511);
@@ -1255,13 +1263,15 @@ read_bytes_to_string(struct archive_read
        const void *src;
 
        /* Fail if we can't make our buffer big enough. */
-       if (archive_string_ensure(as, (size_t)size+1) == NULL) {
+       if (archive_string_ensure(as, size + 1) == NULL) {
                archive_set_error(&a->archive, ENOMEM,
                    "No memory");
                return (ARCHIVE_FATAL);
        }
 
-       tar_flush_unconsumed(a, unconsumed);
+       if (tar_flush_unconsumed(a, unconsumed) != ARCHIVE_OK) {
+               return (ARCHIVE_FATAL);
+       }
 
        /* Read the body into the string. */
        src = __archive_read_ahead(a, size, NULL);
@@ -1272,9 +1282,9 @@ read_bytes_to_string(struct archive_read
                *unconsumed = 0;
                return (ARCHIVE_FATAL);
        }
-       memcpy(as->s, src, (size_t)size);
+       memcpy(as->s, src, size);
        as->s[size] = '\0';
-       as->length = (size_t)size;
+       as->length = size;
        *unconsumed += size;
        return (ARCHIVE_OK);
 }
@@ -1715,7 +1725,9 @@ read_mac_metadata_blob(struct archive_re
         * Q: Is the above idea really possible?  Even
         * when there are GNU or pax extension entries?
         */
-       tar_flush_unconsumed(a, unconsumed);
+       if (tar_flush_unconsumed(a, unconsumed) != ARCHIVE_OK) {
+               return (ARCHIVE_FATAL);
+       }
        data = __archive_read_ahead(a, msize, NULL);
        if (data == NULL) {
                archive_set_error(&a->archive, EINVAL,
@@ -1900,7 +1912,9 @@ header_pax_extension(struct archive_read
                    (long long)ext_size, (long long)ext_size_limit);
                return (ARCHIVE_WARN);
        }
-       tar_flush_unconsumed(a, unconsumed);
+       if (tar_flush_unconsumed(a, unconsumed) != ARCHIVE_OK) {
+               return (ARCHIVE_FATAL);
+       }
 
        /* Parse the size/name of each pax attribute in the body */
        archive_string_init(&attr_name);
@@ -1994,7 +2008,9 @@ header_pax_extension(struct archive_read
 
                /* Consume size, name, and `=` */
                *unconsumed += p - attr_start;
-               tar_flush_unconsumed(a, unconsumed);
+               if (tar_flush_unconsumed(a, unconsumed) != ARCHIVE_OK) {
+                       return (ARCHIVE_FATAL);
+               }
 
                if (value_length == 0) {
                        archive_set_error(&a->archive, EINVAL,
@@ -2017,7 +2033,9 @@ header_pax_extension(struct archive_read
                err = err_combine(err, r);
 
                /* Consume the `\n` that follows the pax attribute value. */
-               tar_flush_unconsumed(a, unconsumed);
+               if (tar_flush_unconsumed(a, unconsumed) != ARCHIVE_OK) {
+                       return (ARCHIVE_FATAL);
+               }
                p = __archive_read_ahead(a, 1, &did_read);
                if (p == NULL) {
                        archive_set_error(&a->archive, EINVAL,
@@ -2033,7 +2051,9 @@ header_pax_extension(struct archive_read
                }
                ext_size -= 1;
                *unconsumed += 1;
-               tar_flush_unconsumed(a, unconsumed);
+               if (tar_flush_unconsumed(a, unconsumed) != ARCHIVE_OK) {
+                       return (ARCHIVE_FATAL);
+               }
        }
        *unconsumed += ext_size + ext_padding;
 
@@ -2290,7 +2310,9 @@ pax_attribute_read_number(struct archive
 
        archive_string_init(&as);
        r = read_bytes_to_string(a, &as, value_length, &unconsumed);
-       tar_flush_unconsumed(a, &unconsumed);
+       if (tar_flush_unconsumed(a, &unconsumed) != ARCHIVE_OK) {
+               return (ARCHIVE_FATAL);
+       }
        if (r < ARCHIVE_OK) {
                archive_string_free(&as);
                *result = 0;
@@ -2940,7 +2962,9 @@ header_gnutar(struct archive_read *a, st
        /* Copy filename over (to ensure null termination). */
        header = (const struct archive_entry_header_gnutar *)h;
        const char *existing_pathname = archive_entry_pathname(entry);
-       if (existing_pathname == NULL || existing_pathname[0] == '\0') {
+       const wchar_t *existing_wcs_pathname = archive_entry_pathname_w(entry);
+       if ((existing_pathname == NULL || existing_pathname[0] == '\0')
+           && (existing_wcs_pathname == NULL || existing_wcs_pathname[0] == L'\0')) {
                if (archive_entry_copy_pathname_l(entry,
                    header->name, sizeof(header->name), tar->sconv) != 0) {
                        err = set_conversion_failed_error(a, tar->sconv, "Pathname");
@@ -3093,7 +3117,9 @@ gnu_sparse_old_read(struct archive_read 
                return (ARCHIVE_OK);
 
        do {
-               tar_flush_unconsumed(a, unconsumed);
+               if (tar_flush_unconsumed(a, unconsumed) != ARCHIVE_OK) {
+                       return (ARCHIVE_FATAL);
+               }
                data = __archive_read_ahead(a, 512, &bytes_read);
                if (data == NULL) {
                        archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
@@ -3283,7 +3309,9 @@ gnu_sparse_10_read(struct archive_read *
                        return (ARCHIVE_FATAL);
        }
        /* Skip rest of block... */
-       tar_flush_unconsumed(a, unconsumed);
+       if (tar_flush_unconsumed(a, unconsumed) != ARCHIVE_OK) {
+               return (ARCHIVE_FATAL);
+       }
        bytes_read = tar->entry_bytes_remaining - remaining;
        to_skip = 0x1ff & -bytes_read;
        /* Fail if tar->entry_bytes_remaing would get negative */
@@ -3509,7 +3537,9 @@ readline(struct archive_read *a, struct 
        const char *s;
        void *p;
 
-       tar_flush_unconsumed(a, unconsumed);
+       if (tar_flush_unconsumed(a, unconsumed) != ARCHIVE_OK) {
+               return (ARCHIVE_FATAL);
+       }
 
        t = __archive_read_ahead(a, 1, &bytes_read);
        if (bytes_read <= 0 || t == NULL)
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_zip.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_zip.c:1.18 pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_zip.c:1.19
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_zip.c:1.18 Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_zip.c      Sun Nov  2 08:52:14 2025
@@ -3015,8 +3015,8 @@ init_WinZip_AES_decryption(struct archiv
                    p, salt_len, 1000, derived_key, key_len * 2 + 2);
                if (r != 0) {
                        archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
-                           "Decryption is unsupported due to lack of "
-                           "crypto library");
+                           r == CRYPTOR_STUB_FUNCTION ? "Decryption is unsupported due "
+                               "to lack of crypto library" : "Failed to process passphrase");
                        return (ARCHIVE_FAILED);
                }
 

Index: pkgsrc/archivers/libarchive/files/libarchive/archive_entry_paths.3
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_entry_paths.3:1.4 pkgsrc/archivers/libarchive/files/libarchive/archive_entry_paths.3:1.5
--- pkgsrc/archivers/libarchive/files/libarchive/archive_entry_paths.3:1.4      Tue May 26 09:16:42 2020
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_entry_paths.3  Sun Nov  2 08:52:14 2025
@@ -64,7 +64,7 @@ Streaming Archive Library (libarchive, -
 .Ft void
 .Fn archive_entry_copy_hardlink "struct archive_entry *a" "const char *path"
 .Ft void
-.Fn archive_entry_copy_hardlink_w "struct archive_entry *a "const wchar_t *path"
+.Fn archive_entry_copy_hardlink_w "struct archive_entry *a" "const wchar_t *path"
 .Ft int
 .Fn archive_entry_update_hardlink_utf8 "struct archive_entry *a" "const char *path"
 .Ft void
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_set_format.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_set_format.c:1.4 pkgsrc/archivers/libarchive/files/libarchive/archive_read_set_format.c:1.5
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_set_format.c:1.4  Fri Apr 12 15:39:51 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_set_format.c      Sun Nov  2 08:52:14 2025
@@ -37,7 +37,7 @@ int
 archive_read_set_format(struct archive *_a, int code)
 {
   int r1, r2, slots, i;
-  char str[10];
+  const char *str;
   struct archive_read *a = (struct archive_read *)_a;
 
   if ((r1 = archive_read_support_format_by_code(_a, code)) < (ARCHIVE_OK))
@@ -49,49 +49,49 @@ archive_read_set_format(struct archive *
   switch (code & ARCHIVE_FORMAT_BASE_MASK)
   {
     case ARCHIVE_FORMAT_7ZIP:
-      strcpy(str, "7zip");
+      str = "7zip";
       break;
     case ARCHIVE_FORMAT_AR:
-      strcpy(str, "ar");
+      str = "ar";
       break;
     case ARCHIVE_FORMAT_CAB:
-      strcpy(str, "cab");
+      str = "cab";
       break;
     case ARCHIVE_FORMAT_CPIO:
-      strcpy(str, "cpio");
+      str = "cpio";
       break;
     case ARCHIVE_FORMAT_EMPTY:
-      strcpy(str, "empty");
+      str = "empty";
       break;
     case ARCHIVE_FORMAT_ISO9660:
-      strcpy(str, "iso9660");
+      str = "iso9660";
       break;
     case ARCHIVE_FORMAT_LHA:
-      strcpy(str, "lha");
+      str = "lha";
       break;
     case ARCHIVE_FORMAT_MTREE:
-      strcpy(str, "mtree");
+      str = "mtree";
       break;
     case ARCHIVE_FORMAT_RAR:
-      strcpy(str, "rar");
+      str = "rar";
       break;
     case ARCHIVE_FORMAT_RAR_V5:
-      strcpy(str, "rar5");
+      str = "rar5";
       break;
     case ARCHIVE_FORMAT_RAW:
-      strcpy(str, "raw");
+      str = "raw";
       break;
     case ARCHIVE_FORMAT_TAR:
-      strcpy(str, "tar");
+      str = "tar";
       break;
     case ARCHIVE_FORMAT_WARC:
-      strcpy(str, "warc");
+      str = "warc";
       break;
     case ARCHIVE_FORMAT_XAR:
-      strcpy(str, "xar");
+      str = "xar";
       break;
     case ARCHIVE_FORMAT_ZIP:
-      strcpy(str, "zip");
+      str = "zip";
       break;
     default:
       archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
Index: pkgsrc/archivers/libarchive/files/libarchive/filter_fork_posix.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/filter_fork_posix.c:1.4 pkgsrc/archivers/libarchive/files/libarchive/filter_fork_posix.c:1.5
--- pkgsrc/archivers/libarchive/files/libarchive/filter_fork_posix.c:1.4        Fri Apr 12 15:39:52 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/filter_fork_posix.c    Sun Nov  2 08:52:15 2025
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2007 Joerg Sonnenberger
- * Copyright (c) 2012 Michihiro NAKAJIMA 
+ * Copyright (c) 2012 Michihiro NAKAJIMA
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -76,7 +76,15 @@ __archive_create_child(const char *cmd, 
 {
        pid_t child = -1;
        int stdin_pipe[2], stdout_pipe[2], tmp;
+
+#if !defined(POSIX_SPAWN_CLOEXEC_DEFAULT) && \
+    (HAVE_FORK || HAVE_VFORK) && \
+    (HAVE_CLOSEFROM || HAVE_CLOSE_RANGE || defined(_SC_OPEN_MAX))
+#undef HAVE_POSIX_SPAWNP
+#endif
+
 #if HAVE_POSIX_SPAWNP
+       posix_spawnattr_t attr;
        posix_spawn_file_actions_t actions;
        int r;
 #endif
@@ -107,11 +115,21 @@ __archive_create_child(const char *cmd, 
 
 #if HAVE_POSIX_SPAWNP
 
-       r = posix_spawn_file_actions_init(&actions);
+       r = posix_spawnattr_init(&attr);
        if (r != 0) {
                errno = r;
                goto stdout_opened;
        }
+       r = posix_spawn_file_actions_init(&actions);
+       if (r != 0) {
+               errno = r;
+               goto attr_inited;
+       }
+#ifdef POSIX_SPAWN_CLOEXEC_DEFAULT
+       r = posix_spawnattr_setflags(&attr, POSIX_SPAWN_CLOEXEC_DEFAULT);
+       if (r != 0)
+               goto actions_inited;
+#endif
        r = posix_spawn_file_actions_addclose(&actions, stdin_pipe[1]);
        if (r != 0)
                goto actions_inited;
@@ -136,11 +154,12 @@ __archive_create_child(const char *cmd, 
                if (r != 0)
                        goto actions_inited;
        }
-       r = posix_spawnp(&child, cmdline->path, &actions, NULL,
+       r = posix_spawnp(&child, cmdline->path, &actions, &attr,
                cmdline->argv, NULL);
        if (r != 0)
                goto actions_inited;
        posix_spawn_file_actions_destroy(&actions);
+       posix_spawnattr_destroy(&attr);
 
 #else /* HAVE_POSIX_SPAWNP */
 
@@ -162,6 +181,16 @@ __archive_create_child(const char *cmd, 
                        _exit(254);
                if (stdout_pipe[1] != 1 /* stdout */)
                        close(stdout_pipe[1]);
+
+#if HAVE_CLOSEFROM
+               closefrom(3);
+#elif HAVE_CLOSE_RANGE
+               close_range(3, ~0U, 0);
+#elif defined(_SC_OPEN_MAX)
+               for (int i = sysconf(_SC_OPEN_MAX); i > 3;)
+                       close(--i);
+#endif
+
                execvp(cmdline->path, cmdline->argv);
                _exit(254);
        }
@@ -183,6 +212,8 @@ __archive_create_child(const char *cmd, 
 actions_inited:
        errno = r;
        posix_spawn_file_actions_destroy(&actions);
+attr_inited:
+       posix_spawnattr_destroy(&attr);
 #endif
 stdout_opened:
        close(stdout_pipe[0]);

Index: pkgsrc/archivers/libarchive/files/libarchive/archive_entry_stat.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_entry_stat.c:1.5 pkgsrc/archivers/libarchive/files/libarchive/archive_entry_stat.c:1.6
--- pkgsrc/archivers/libarchive/files/libarchive/archive_entry_stat.c:1.5       Fri Apr 12 15:39:50 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_entry_stat.c   Sun Nov  2 08:52:14 2025
@@ -38,6 +38,7 @@
 const struct stat *
 archive_entry_stat(struct archive_entry *entry)
 {
+       int64_t size;
        struct stat *st;
        if (entry->stat == NULL) {
                entry->stat = calloc(1, sizeof(*st));
@@ -74,7 +75,10 @@ archive_entry_stat(struct archive_entry 
        st->st_ino = (ino_t)archive_entry_ino64(entry);
        st->st_nlink = archive_entry_nlink(entry);
        st->st_rdev = archive_entry_rdev(entry);
-       st->st_size = (off_t)archive_entry_size(entry);
+       size = archive_entry_size(entry);
+       st->st_size = (off_t)size;
+       if (st->st_size < 0 || (int64_t)st->st_size != size)
+               st->st_size = 0;
        st->st_mode = archive_entry_mode(entry);
 
        /*

Index: pkgsrc/archivers/libarchive/files/libarchive/archive_platform.h
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_platform.h:1.16 pkgsrc/archivers/libarchive/files/libarchive/archive_platform.h:1.17
--- pkgsrc/archivers/libarchive/files/libarchive/archive_platform.h:1.16        Mon Apr 28 10:31:34 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_platform.h     Sun Nov  2 08:52:14 2025
@@ -183,16 +183,6 @@
 #define        CAN_RESTORE_METADATA_FD
 #endif
 
-/*
- * glibc 2.24 deprecates readdir_r
- * bionic c deprecates readdir_r too
- */
-#if defined(HAVE_READDIR_R) && (!defined(__GLIBC__) || !defined(__GLIBC_MINOR__) || __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 24)) && (!defined(__ANDROID__))
-#define        USE_READDIR_R   1
-#else
-#undef USE_READDIR_R
-#endif
-
 /* Set up defaults for internal error codes. */
 #ifndef ARCHIVE_ERRNO_FILE_FORMAT
 #if HAVE_EFTYPE
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read.c:1.16 pkgsrc/archivers/libarchive/files/libarchive/archive_read.c:1.17
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read.c:1.16    Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read.c Sun Nov  2 08:52:14 2025
@@ -575,8 +575,7 @@ choose_filters(struct archive_read *a)
                        return (ARCHIVE_OK);
                }
 
-               filter
-                   = calloc(1, sizeof(*filter));
+               filter = calloc(1, sizeof(*filter));
                if (filter == NULL)
                        return (ARCHIVE_FATAL);
                filter->bidder = best_bidder;
@@ -834,7 +833,9 @@ archive_read_data(struct archive *_a, vo
                        r = archive_read_data_block(a, &read_buf,
                            &a->read_data_remaining, &a->read_data_offset);
                        a->read_data_block = read_buf;
-                       if (r == ARCHIVE_EOF)
+                       if (r == ARCHIVE_EOF &&
+                           a->read_data_offset == a->read_data_output_offset &&
+                           a->read_data_remaining == 0)
                                return (bytes_read);
                        /*
                         * Error codes are all negative, so the status
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_mtree.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_mtree.c:1.16 pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_mtree.c:1.17
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_mtree.c:1.16       Sat Oct 19 05:39:58 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_mtree.c    Sun Nov  2 08:52:14 2025
@@ -51,6 +51,7 @@
 #include "archive.h"
 #include "archive_entry.h"
 #include "archive_entry_private.h"
+#include "archive_platform_stat.h"
 #include "archive_private.h"
 #include "archive_rb.h"
 #include "archive_read_private.h"
@@ -1073,6 +1074,8 @@ read_mtree(struct archive_read *a, struc
                /* Non-printable characters are not allowed */
                for (s = p;s < p + len - 1; s++) {
                        if (!isprint((unsigned char)*s) && *s != '\t') {
+                               archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+                                       "Non-printable character 0x%02X", (unsigned char)(*s));
                                r = ARCHIVE_FATAL;
                                break;
                        }
@@ -1175,7 +1178,7 @@ parse_file(struct archive_read *a, struc
     struct mtree *mtree, struct mtree_entry *mentry, int *use_next)
 {
        const char *path;
-       struct stat st_storage, *st;
+       la_seek_stat_t st_storage, *st;
        struct mtree_entry *mp;
        struct archive_entry *sparse_entry;
        int r = ARCHIVE_OK, r1, parsed_kws;
@@ -1251,7 +1254,7 @@ parse_file(struct archive_read *a, struc
                                archive_entry_filetype(entry) == AE_IFDIR) {
                        mtree->fd = open(path, O_RDONLY | O_BINARY | O_CLOEXEC);
                        __archive_ensure_cloexec_flag(mtree->fd);
-                       if (mtree->fd == -1 && (
+                       if (mtree->fd < 0 && (
 #if defined(_WIN32) && !defined(__CYGWIN__)
         /*
          * On Windows, attempting to open a file with an
@@ -1270,7 +1273,7 @@ parse_file(struct archive_read *a, struc
 
                st = &st_storage;
                if (mtree->fd >= 0) {
-                       if (fstat(mtree->fd, st) == -1) {
+                       if (la_seek_fstat(mtree->fd, st) == -1) {
                                archive_set_error(&a->archive, errno,
                                                "Could not fstat %s", path);
                                r = ARCHIVE_WARN;
@@ -1283,7 +1286,7 @@ parse_file(struct archive_read *a, struc
 #ifdef HAVE_LSTAT
                else if (lstat(path, st) == -1)
 #else
-               else if (la_stat(path, st) == -1)
+               else if (la_seek_stat(path, st) == -1)
 #endif
                {
                        st = NULL;
@@ -2130,6 +2133,13 @@ readline(struct archive_read *a, struct 
                for (u = mtree->line.s + find_off; *u; ++u) {
                        if (u[0] == '\n') {
                                /* Ends with unescaped newline. */
+                               /* Check if preceded by '\r' for CRLF handling */
+                               if (u > mtree->line.s && u[-1] == '\r') {
+                                       /* CRLF ending - remove the '\r' */
+                                       u[-1] = '\n';
+                                       u[0] = '\0';
+                                       total_size--;
+                               }
                                *start = mtree->line.s;
                                return total_size;
                        } else if (u[0] == '#') {
@@ -2144,6 +2154,11 @@ readline(struct archive_read *a, struct 
                                        total_size -= 2;
                                        mtree->line.s[total_size] = '\0';
                                        break;
+                               } else if (u[1] == '\r' && u[2] == '\n') {
+                                       /* Trim escaped CRLF. */
+                                       total_size -= 3;
+                                       mtree->line.s[total_size] = '\0';
+                                       break;
                                } else if (u[1] != '\0') {
                                        /* Skip the two-char escape sequence */
                                        ++u;
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_util.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_util.c:1.16 pkgsrc/archivers/libarchive/files/libarchive/archive_util.c:1.17
--- pkgsrc/archivers/libarchive/files/libarchive/archive_util.c:1.16    Tue Jul  1 15:14:44 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_util.c Sun Nov  2 08:52:14 2025
@@ -445,11 +445,39 @@ __archive_mkstemp(wchar_t *template)
 #else
 
 static int
-get_tempdir(struct archive_string *temppath)
+__archive_issetugid(void)
 {
-       const char *tmp;
+#ifdef HAVE_ISSETUGID
+       return (issetugid());
+#elif HAVE_GETRESUID
+       uid_t ruid, euid, suid;
+       gid_t rgid, egid, sgid;
+       if (getresuid(&ruid, &euid, &suid) != 0)
+               return (-1);
+       if (ruid != euid || ruid != suid)
+               return (1);
+       if (getresgid(&ruid, &egid, &sgid) != 0)
+               return (-1);
+       if (rgid != egid || rgid != sgid)
+               return (1);
+#elif HAVE_GETEUID
+       if (geteuid() != getuid())
+               return (1);
+#if HAVE_GETEGID
+       if (getegid() != getgid())
+               return (1);
+#endif
+#endif
+       return (0);
+}
+
+int
+__archive_get_tempdir(struct archive_string *temppath)
+{
+       const char *tmp = NULL;
 
-       tmp = getenv("TMPDIR");
+       if (__archive_issetugid() == 0)
+               tmp = getenv("TMPDIR");
        if (tmp == NULL)
 #ifdef _PATH_TMP
                tmp = _PATH_TMP;
@@ -476,7 +504,7 @@ __archive_mktemp(const char *tmpdir)
 
        archive_string_init(&temp_name);
        if (tmpdir == NULL) {
-               if (get_tempdir(&temp_name) != ARCHIVE_OK)
+               if (__archive_get_tempdir(&temp_name) != ARCHIVE_OK)
                        goto exit_tmpfile;
        } else {
                archive_strcpy(&temp_name, tmpdir);
@@ -538,7 +566,7 @@ __archive_mktempx(const char *tmpdir, ch
        if (template == NULL) {
                archive_string_init(&temp_name);
                if (tmpdir == NULL) {
-                       if (get_tempdir(&temp_name) != ARCHIVE_OK)
+                       if (__archive_get_tempdir(&temp_name) != ARCHIVE_OK)
                                goto exit_tmpfile;
                } else
                        archive_strcpy(&temp_name, tmpdir);

Index: pkgsrc/archivers/libarchive/files/libarchive/archive_private.h
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_private.h:1.10 pkgsrc/archivers/libarchive/files/libarchive/archive_private.h:1.11
--- pkgsrc/archivers/libarchive/files/libarchive/archive_private.h:1.10 Sat Oct 19 05:39:58 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_private.h      Sun Nov  2 08:52:14 2025
@@ -158,6 +158,7 @@ int __archive_check_magic(struct archive
 __LA_NORETURN void     __archive_errx(int retvalue, const char *msg);
 
 void   __archive_ensure_cloexec_flag(int fd);
+int    __archive_get_tempdir(struct archive_string *);
 int    __archive_mktemp(const char *tmpdir);
 #if defined(_WIN32) && !defined(__CYGWIN__)
 int    __archive_mkstemp(wchar_t *templates);
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_warc.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_warc.c:1.10 pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_warc.c:1.11
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_warc.c:1.10        Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_warc.c     Sun Nov  2 08:52:14 2025
@@ -405,7 +405,7 @@ _warc_read(struct archive_read *a, const
                /* it's our lucky day, no work, we can leave early */
                *buf = NULL;
                *bsz = 0U;
-               *off = w->cntoff + 4U/*for \r\n\r\n separator*/;
+               *off = w->cntoff;
                w->unconsumed = 0U;
                return (ARCHIVE_EOF);
        }
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_7zip.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_7zip.c:1.10 pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_7zip.c:1.11
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_7zip.c:1.10   Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_7zip.c        Sun Nov  2 08:52:15 2025
@@ -686,7 +686,7 @@ write_to_temp(struct archive_write *a, c
                ws = write(zip->temp_fd, p, s);
                if (ws < 0) {
                        archive_set_error(&(a->archive), errno,
-                           "fwrite function failed");
+                           "write function failed");
                        return (ARCHIVE_FATAL);
                }
                s -= ws;

Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_disk_posix.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_disk_posix.c:1.12 pkgsrc/archivers/libarchive/files/libarchive/archive_read_disk_posix.c:1.13
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_disk_posix.c:1.12 Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_disk_posix.c      Sun Nov  2 08:52:14 2025
@@ -168,9 +168,6 @@ struct filesystem {
        int             synthetic;
        int             remote;
        int             noatime;
-#if defined(USE_READDIR_R)
-       size_t          name_max;
-#endif
        long            incr_xfer_size;
        long            max_xfer_size;
        long            min_xfer_size;
@@ -203,10 +200,6 @@ struct tree {
        DIR                     *d;
 #define        INVALID_DIR_HANDLE NULL
        struct dirent           *de;
-#if defined(USE_READDIR_R)
-       struct dirent           *dirent;
-       size_t                   dirent_allocated;
-#endif
        int                      flags;
        int                      visit_type;
        /* Error code from last failed operation. */
@@ -869,7 +862,7 @@ next_entry(struct archive_read_disk *a, 
                        tree_enter_initial_dir(t);
                        return (ARCHIVE_FATAL);
                case TREE_ERROR_DIR:
-                       archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+                       archive_set_error(&a->archive, t->tree_errno,
                            "%s: Couldn't visit directory",
                            tree_current_path(t));
                        tree_enter_initial_dir(t);
@@ -1578,9 +1571,6 @@ setup_current_filesystem(struct archive_
 #  endif
 #endif
        int r, xr = 0;
-#if !defined(HAVE_STRUCT_STATFS_F_NAMEMAX)
-       long nm;
-#endif
 
        t->current_filesystem->synthetic = -1;
        t->current_filesystem->remote = -1;
@@ -1647,35 +1637,6 @@ setup_current_filesystem(struct archive_
 #endif
                t->current_filesystem->noatime = 0;
 
-#if defined(USE_READDIR_R)
-       /* Set maximum filename length. */
-#if defined(HAVE_STRUCT_STATFS_F_NAMEMAX)
-       t->current_filesystem->name_max = sfs.f_namemax;
-#else
-# if defined(_PC_NAME_MAX)
-       /* Mac OS X does not have f_namemax in struct statfs. */
-       if (tree_current_is_symblic_link_target(t)) {
-               if (tree_enter_working_dir(t) != 0) {
-                       archive_set_error(&a->archive, errno, "fchdir failed");
-                       return (ARCHIVE_FAILED);
-               }
-               nm = pathconf(tree_current_access_path(t), _PC_NAME_MAX);
-       } else
-               nm = fpathconf(tree_current_dir_fd(t), _PC_NAME_MAX);
-# else
-       nm = -1;
-# endif
-       if (nm == -1)
-               t->current_filesystem->name_max = NAME_MAX;
-       else
-               t->current_filesystem->name_max = nm;
-#endif
-       if (t->current_filesystem->name_max == 0) {
-               archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
-                   "Cannot determine name_max");
-               return (ARCHIVE_FAILED);
-       }
-#endif /* USE_READDIR_R */
        return (ARCHIVE_OK);
 }
 
@@ -1732,8 +1693,6 @@ setup_current_filesystem(struct archive_
 #endif
                t->current_filesystem->noatime = 0;
 
-       /* Set maximum filename length. */
-       t->current_filesystem->name_max = svfs.f_namemax;
        return (ARCHIVE_OK);
 }
 
@@ -1863,19 +1822,6 @@ setup_current_filesystem(struct archive_
 #endif
                t->current_filesystem->noatime = 0;
 
-#if defined(USE_READDIR_R)
-       /* Set maximum filename length. */
-#if defined(HAVE_STATVFS)
-       t->current_filesystem->name_max = svfs.f_namemax;
-#else
-       t->current_filesystem->name_max = sfs.f_namelen;
-#endif
-       if (t->current_filesystem->name_max == 0) {
-               archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
-                   "Cannot determine name_max");
-               return (ARCHIVE_FAILED);
-       }
-#endif
        return (ARCHIVE_OK);
 }
 
@@ -1953,15 +1899,6 @@ setup_current_filesystem(struct archive_
 #endif
                t->current_filesystem->noatime = 0;
 
-#if defined(USE_READDIR_R)
-       /* Set maximum filename length. */
-       t->current_filesystem->name_max = svfs.f_namemax;
-       if (t->current_filesystem->name_max == 0) {
-               archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
-                   "Cannot determine name_max");
-               return (ARCHIVE_FAILED);
-       }
-#endif
        return (ARCHIVE_OK);
 }
 
@@ -1975,9 +1912,6 @@ static int
 setup_current_filesystem(struct archive_read_disk *a)
 {
        struct tree *t = a->tree;
-#if defined(_PC_NAME_MAX) && defined(USE_READDIR_R)
-       long nm;
-#endif
        t->current_filesystem->synthetic = -1;/* Not supported */
        t->current_filesystem->remote = -1;/* Not supported */
        t->current_filesystem->noatime = 0;
@@ -1987,40 +1921,6 @@ setup_current_filesystem(struct archive_
        t->current_filesystem->min_xfer_size = -1;
        t->current_filesystem->incr_xfer_size = -1;
 
-#if defined(USE_READDIR_R)
-       /* Set maximum filename length. */
-#  if defined(_PC_NAME_MAX)
-       if (tree_current_is_symblic_link_target(t)) {
-               if (tree_enter_working_dir(t) != 0) {
-                       archive_set_error(&a->archive, errno, "fchdir failed");
-                       return (ARCHIVE_FAILED);
-               }
-               nm = pathconf(tree_current_access_path(t), _PC_NAME_MAX);
-       } else
-               nm = fpathconf(tree_current_dir_fd(t), _PC_NAME_MAX);
-       if (nm == -1)
-#  endif /* _PC_NAME_MAX */
-               /*
-                * Some systems (HP-UX or others?) incorrectly defined
-                * NAME_MAX macro to be a smaller value.
-                */
-#  if defined(NAME_MAX) && NAME_MAX >= 255
-               t->current_filesystem->name_max = NAME_MAX;
-#  else
-               /* No way to get a trusted value of maximum filename
-                * length. */
-               t->current_filesystem->name_max = PATH_MAX;
-#  endif /* NAME_MAX */
-#  if defined(_PC_NAME_MAX)
-       else
-               t->current_filesystem->name_max = nm;
-#  endif /* _PC_NAME_MAX */
-       if (t->current_filesystem->name_max == 0) {
-               archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
-                   "Cannot determine name_max");
-               return (ARCHIVE_FAILED);
-       }
-#endif /* USE_READDIR_R */
        return (ARCHIVE_OK);
 }
 
@@ -2112,8 +2012,11 @@ tree_dup(int fd)
        }
 #endif /* F_DUPFD_CLOEXEC */
        new_fd = dup(fd);
-       __archive_ensure_cloexec_flag(new_fd);
-       return (new_fd);
+       if (new_fd != -1) {
+               __archive_ensure_cloexec_flag(new_fd);
+               return (new_fd);
+       }
+       return (-1);
 }
 
 /*
@@ -2235,11 +2138,16 @@ tree_reopen(struct tree *t, const char *
         * so try again for execute. The consequences of not opening this are
         * unhelpful and unnecessary errors later.
         */
-       if (t->initial_dir_fd < 0)
+       if (t->initial_dir_fd < 0) {
                t->initial_dir_fd = open(".", o_flag | O_CLOEXEC);
+               if (t->initial_dir_fd < 0)
+                       return NULL;
+       }
 #endif
        __archive_ensure_cloexec_flag(t->initial_dir_fd);
        t->working_dir_fd = tree_dup(t->initial_dir_fd);
+       if (t->working_dir_fd < 0)
+               return NULL;
        return (t);
 }
 
@@ -2449,12 +2357,11 @@ tree_dir_next_posix(struct tree *t)
        size_t namelen;
 
        if (t->d == NULL) {
-#if defined(USE_READDIR_R)
-               size_t dirent_size;
-#endif
 
 #if defined(HAVE_FDOPENDIR)
-               t->d = fdopendir(tree_dup(t->working_dir_fd));
+               int fd = tree_dup(t->working_dir_fd);
+               if (fd != -1)
+                       t->d = fdopendir(fd);
 #else /* HAVE_FDOPENDIR */
                if (tree_enter_working_dir(t) == 0) {
                        t->d = opendir(".");
@@ -2470,45 +2377,12 @@ tree_dir_next_posix(struct tree *t)
                        t->visit_type = r != 0 ? r : TREE_ERROR_DIR;
                        return (t->visit_type);
                }
-#if defined(USE_READDIR_R)
-               dirent_size = offsetof(struct dirent, d_name) +
-                 t->filesystem_table[t->current->filesystem_id].name_max + 1;
-               if (t->dirent == NULL || t->dirent_allocated < dirent_size) {
-                       free(t->dirent);
-                       t->dirent = malloc(dirent_size);
-                       if (t->dirent == NULL) {
-                               closedir(t->d);
-                               t->d = INVALID_DIR_HANDLE;
-                               (void)tree_ascend(t);
-                               tree_pop(t);
-                               t->tree_errno = ENOMEM;
-                               t->visit_type = TREE_ERROR_DIR;
-                               return (t->visit_type);
-                       }
-                       t->dirent_allocated = dirent_size;
-               }
-#endif /* USE_READDIR_R */
        }
        for (;;) {
                errno = 0;
-#if defined(USE_READDIR_R)
-               r = readdir_r(t->d, t->dirent, &t->de);
-#ifdef _AIX
-               /* Note: According to the man page, return value 9 indicates
-                * that the readdir_r was not successful and the error code
-                * is set to the global errno variable. And then if the end
-                * of directory entries was reached, the return value is 9
-                * and the third parameter is set to NULL and errno is
-                * unchanged. */
-               if (r == 9)
-                       r = errno;
-#endif /* _AIX */
-               if (r != 0 || t->de == NULL) {
-#else
                t->de = readdir(t->d);
                if (t->de == NULL) {
                        r = errno;
-#endif
                        closedir(t->d);
                        t->d = INVALID_DIR_HANDLE;
                        if (r != 0) {
@@ -2747,9 +2621,6 @@ tree_free(struct tree *t)
        if (t == NULL)
                return;
        archive_string_free(&t->path);
-#if defined(USE_READDIR_R)
-       free(t->dirent);
-#endif
        free(t->sparse_list);
        for (i = 0; i < t->max_filesystem_id; i++)
                free(t->filesystem_table[i].allocation_ptr);
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_file.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_file.c:1.12 pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_file.c:1.13
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_file.c:1.12  Tue Jul  1 15:14:44 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_file.c       Sun Nov  2 08:52:14 2025
@@ -48,6 +48,7 @@
 #endif
 
 #include "archive.h"
+#include "archive_platform_stat.h"
 
 struct read_FILE_data {
        FILE    *f;
@@ -65,7 +66,7 @@ static int64_t        FILE_skip(struct archive 
 int
 archive_read_open_FILE(struct archive *a, FILE *f)
 {
-       struct stat st;
+       la_seek_stat_t st;
        struct read_FILE_data *mine;
        size_t block_size = 128 * 1024;
        void *b;
@@ -88,7 +89,7 @@ archive_read_open_FILE(struct archive *a
         * streams that don't support fileno()).  As a result, fileno()
         * should be used cautiously.)
         */
-       if (fstat(fileno(mine->f), &st) == 0 && S_ISREG(st.st_mode)) {
+       if (la_seek_fstat(fileno(mine->f), &st) == 0 && S_ISREG(st.st_mode)) {
                archive_read_extract_set_skip_file(a, st.st_dev, st.st_ino);
                /* Enable the seek optimization only for regular files. */
                mine->can_skip = 1;
@@ -205,15 +206,15 @@ FILE_seek(struct archive *a, void *clien
        int seek_bits = sizeof(seek) * 8 - 1;
        (void)a; /* UNUSED */
 
-       /* Reduce a request that would overflow the 'seek' variable. */
+       /* Do not perform a seek which cannot be fulfilled. */
        if (sizeof(request) > sizeof(seek)) {
                const int64_t max_seek =
                    (((int64_t)1 << (seek_bits - 1)) - 1) * 2 + 1;
                const int64_t min_seek = ~max_seek;
-               if (request > max_seek)
-                       seek = max_seek;
-               else if (request < min_seek)
-                       seek = min_seek;
+               if (request < min_seek || request > max_seek) {
+                       errno = EOVERFLOW;
+                       goto err;
+               }
        }
 
 #ifdef __ANDROID__
@@ -236,6 +237,7 @@ FILE_seek(struct archive *a, void *clien
        }
 #endif
        /* If we arrive here, the input is corrupted or truncated so fail. */
+err:
        archive_set_error(a, errno, "Error seeking in FILE* pointer");
        return (ARCHIVE_FATAL);
 }
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_filename.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_filename.c:1.12 pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_filename.c:1.13
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_filename.c:1.12      Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_open_filename.c   Sun Nov  2 08:52:14 2025
@@ -59,6 +59,7 @@
 #endif
 
 #include "archive.h"
+#include "archive_platform_stat.h"
 #include "archive_private.h"
 #include "archive_string.h"
 
@@ -136,8 +137,10 @@ archive_read_open_filenames(struct archi
                        mine->filename_type = FNT_STDIN;
                } else
                        mine->filename_type = FNT_MBS;
-               if (archive_read_append_callback_data(a, mine) != (ARCHIVE_OK))
+               if (archive_read_append_callback_data(a, mine) != (ARCHIVE_OK)) {
+                       free(mine);
                        return (ARCHIVE_FATAL);
+               }
                if (filenames == NULL)
                        break;
                filename = *(filenames++);
@@ -216,8 +219,10 @@ archive_read_open_filenames_w(struct arc
                        archive_string_free(&fn);
 #endif
                }
-               if (archive_read_append_callback_data(a, mine) != (ARCHIVE_OK))
+               if (archive_read_append_callback_data(a, mine) != (ARCHIVE_OK)) {
+                       free(mine);
                        return (ARCHIVE_FATAL);
+               }
                if (wfilenames == NULL)
                        break;
                wfilename = *(wfilenames++);
@@ -248,7 +253,7 @@ archive_read_open_filename_w(struct arch
 static int
 file_open(struct archive *a, void *client_data)
 {
-       struct stat st;
+       la_seek_stat_t st;
        struct read_file_data *mine = (struct read_file_data *)client_data;
        void *buffer;
        const char *filename = NULL;
@@ -313,7 +318,7 @@ file_open(struct archive *a, void *clien
                goto fail;
 #endif
        }
-       if (fstat(fd, &st) != 0) {
+       if (la_seek_fstat(fd, &st) != 0) {
 #if defined(_WIN32) && !defined(__CYGWIN__)
                if (mine->filename_type == FNT_WCS)
                        archive_set_error(a, errno, "Can't stat '%ls'",
@@ -482,10 +487,11 @@ file_skip_lseek(struct archive *a, void 
        struct read_file_data *mine = (struct read_file_data *)client_data;
 #if defined(_WIN32) && !defined(__CYGWIN__)
        /* We use _lseeki64() on Windows. */
-       int64_t old_offset, new_offset, skip = request;
+       int64_t old_offset, new_offset;
 #else
-       off_t old_offset, new_offset, skip = (off_t)request;
+       off_t old_offset, new_offset;
 #endif
+       la_seek_t skip = (la_seek_t)request;
        int skip_bits = sizeof(skip) * 8 - 1;
 
        /* We use off_t here because lseek() is declared that way. */
@@ -552,21 +558,21 @@ static int64_t
 file_seek(struct archive *a, void *client_data, int64_t request, int whence)
 {
        struct read_file_data *mine = (struct read_file_data *)client_data;
-       off_t seek = (off_t)request;
+       la_seek_t seek = (la_seek_t)request;
        int64_t r;
        int seek_bits = sizeof(seek) * 8 - 1;
 
        /* We use off_t here because lseek() is declared that way. */
 
-       /* Reduce a request that would overflow the 'seek' variable. */
+       /* Do not perform a seek which cannot be fulfilled. */
        if (sizeof(request) > sizeof(seek)) {
                const int64_t max_seek =
                    (((int64_t)1 << (seek_bits - 1)) - 1) * 2 + 1;
                const int64_t min_seek = ~max_seek;
-               if (request > max_seek)
-                       seek = (off_t)max_seek;
-               else if (request < min_seek)
-                       seek = (off_t)min_seek;
+               if (request < min_seek || request > max_seek) {
+                       errno = EOVERFLOW;
+                       goto err;
+               }
        }
 
        r = lseek(mine->fd, seek, whence);
@@ -574,6 +580,7 @@ file_seek(struct archive *a, void *clien
                return r;
 
        /* If the input is corrupted or truncated, fail. */
+err:
        if (mine->filename_type == FNT_STDIN)
                archive_set_error(a, errno, "Error seeking in stdin");
        else if (mine->filename_type == FNT_MBS)
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_windows.h
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_windows.h:1.12 pkgsrc/archivers/libarchive/files/libarchive/archive_windows.h:1.13
--- pkgsrc/archivers/libarchive/files/libarchive/archive_windows.h:1.12 Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_windows.h      Sun Nov  2 08:52:14 2025
@@ -72,6 +72,8 @@
 #include <windows.h>
 //#define      EFTYPE 7
 
+#include "archive_platform_stat.h"
+
 #if defined(__BORLANDC__)
 #pragma warn -8068     /* Constant out of range in comparison. */
 #pragma warn -8072     /* Suspicious pointer arithmetic. */
@@ -106,6 +108,7 @@
 #endif
 #define        lstat           __la_stat
 #define        open            __la_open
+#define        _wopen          __la_wopen
 #define        read            __la_read
 #if !defined(__BORLANDC__) && !defined(__WATCOMC__)
 #define setmode                _setmode
@@ -261,6 +264,9 @@
     #define    F_OK    0       /*  Test for existence of file  */
 #endif
 
+/* Functions to circumvent off_t limitations */
+int __la_seek_fstat(int fd, la_seek_stat_t *st);
+int __la_seek_stat(const char *path, la_seek_stat_t *st);
 
 /* Replacement POSIX function */
 extern int      __la_fstat(int fd, struct stat *st);
@@ -269,6 +275,7 @@ extern int   __la_lstat(const char *path,
 extern __int64  __la_lseek(int fd, __int64 offset, int whence);
 #endif
 extern int      __la_open(const char *path, int flags, ...);
+extern int      __la_wopen(const wchar_t *path, int flags, ...);
 extern ssize_t  __la_read(int fd, void *buf, size_t nbytes);
 extern int      __la_stat(const char *path, struct stat *st);
 extern pid_t    __la_waitpid(HANDLE child, int *status, int option);
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write_disk_windows.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write_disk_windows.c:1.12 pkgsrc/archivers/libarchive/files/libarchive/archive_write_disk_windows.c:1.13
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write_disk_windows.c:1.12      Tue Jul  1 15:14:44 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write_disk_windows.c   Sun Nov  2 08:52:14 2025
@@ -1618,7 +1618,7 @@ restore_entry(struct archive_write_disk 
                                (void)clear_nochange_fflags(a);
                        }
                        if ((a->flags & ARCHIVE_EXTRACT_SAFE_WRITES) &&
-                               S_ISREG(st_mode)) {
+                               S_ISREG(a->mode)) {
                                int fd = la_mktemp(a);
 
                                if (fd == -1) {
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_zip.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_zip.c:1.12 pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_zip.c:1.13
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_zip.c:1.12    Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_zip.c Sun Nov  2 08:52:15 2025
@@ -1856,7 +1856,10 @@ archive_write_zip_finish_entry(struct ar
                        }
                        ret = __archive_write_output(a, zip->buf, remainder);
                        if (ret != ARCHIVE_OK)
+                       {
+                               deflateEnd(&zip->stream.deflate);
                                return (ret);
+                       }
                        zip->entry_compressed_written += remainder;
                        zip->written_bytes += remainder;
                        zip->stream.deflate.next_out = zip->buf;
@@ -1898,7 +1901,10 @@ archive_write_zip_finish_entry(struct ar
                        }
                        ret = __archive_write_output(a, zip->buf, remainder);
                        if (ret != ARCHIVE_OK)
+                       {
+                               BZ2_bzCompressEnd(&zip->stream.bzip2);
                                return (ret);
+                       }
                        zip->entry_compressed_written += remainder;
                        zip->written_bytes += remainder;
                        zip->stream.bzip2.next_out = (char*)zip->buf;
@@ -1940,13 +1946,17 @@ archive_write_zip_finish_entry(struct ar
                        }
                        ret = __archive_write_output(a, zip->buf, remainder);
                        if (ret != ARCHIVE_OK)
+                       {
+                               ZSTD_freeCStream(zip->stream.zstd.context);
                                return (ret);
+                       }
                        zip->entry_compressed_written += remainder;
                        zip->written_bytes += remainder;
-                       zip->stream.zstd.out.dst = zip->buf;
                        if (zip->stream.zstd.out.pos != zip->stream.zstd.out.size)
                                finishing = 0;
+                       zip->stream.zstd.out.dst = zip->buf;
                        zip->stream.zstd.out.size = zip->len_buf;
+                       zip->stream.zstd.out.pos = 0;
                } while (finishing);
                ZSTD_freeCStream(zip->stream.zstd.context);
                break;
@@ -1984,7 +1994,10 @@ archive_write_zip_finish_entry(struct ar
                        }
                        ret = __archive_write_output(a, zip->buf, remainder);
                        if (ret != ARCHIVE_OK)
+                       {
+                               lzma_end(&zip->stream.lzma.context);
                                return (ret);
+                       }
                        zip->entry_compressed_written += remainder;
                        zip->written_bytes += remainder;
                        zip->stream.lzma.context.next_out = zip->buf;
@@ -2434,13 +2447,19 @@ init_winzip_aes_encryption(struct archiv
                    "Can't generate random number for encryption");
                return (ARCHIVE_FATAL);
        }
-       archive_pbkdf2_sha1(passphrase, strlen(passphrase),
+       ret = archive_pbkdf2_sha1(passphrase, strlen(passphrase),
            salt, salt_len, 1000, derived_key, key_len * 2 + 2);
+       if (ret != 0) {
+               archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+                   ret == CRYPTOR_STUB_FUNCTION ? "Encryption is unsupported due to "
+                       "lack of crypto library" : "Failed to process passphrase");
+               return (ARCHIVE_FAILED);
+       }
 
        ret = archive_encrypto_aes_ctr_init(&zip->cctx, derived_key, key_len);
        if (ret != 0) {
                archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
-                   "Decryption is unsupported due to lack of crypto library");
+                   "Failed to initialize AES CTR mode");
                return (ARCHIVE_FAILED);
        }
        ret = archive_hmac_sha1_init(&zip->hctx, derived_key + key_len,

Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_filter_program.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_filter_program.c:1.6 pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_filter_program.c:1.7
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_filter_program.c:1.6      Sat Oct 19 05:39:58 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_filter_program.c  Sun Nov  2 08:52:14 2025
@@ -110,7 +110,7 @@ struct program_filter {
        pid_t            child;
 #endif
        int              exit_status;
-       int              waitpid_return;
+       pid_t            waitpid_return;
        int              child_stdin, child_stdout;
 
        char            *out_buf;
@@ -242,16 +242,13 @@ child_stop(struct archive_read_filter *s
                        state->waitpid_return
                            = waitpid(state->child, &state->exit_status, 0);
                } while (state->waitpid_return == -1 && errno == EINTR);
-#if defined(_WIN32) && !defined(__CYGWIN__)
-               CloseHandle(state->child);
-#endif
                state->child = 0;
        }
 
        if (state->waitpid_return < 0) {
                /* waitpid() failed?  This is ugly. */
                archive_set_error(&self->archive->archive, ARCHIVE_ERRNO_MISC,
-                   "Child process exited badly");
+                   "Error closing child process");
                return (ARCHIVE_WARN);
        }
 
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_program.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_program.c:1.6 pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_program.c:1.7
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_program.c:1.6 Fri Apr 12 15:39:52 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_program.c     Sun Nov  2 08:52:14 2025
@@ -330,6 +330,7 @@ __archive_write_program_close(struct arc
     struct archive_write_program_data *data)
 {
        int ret, status;
+       pid_t pid;
        ssize_t bytes_read;
 
        if (data->child == 0)
@@ -373,14 +374,12 @@ cleanup:
                close(data->child_stdin);
        if (data->child_stdout != -1)
                close(data->child_stdout);
-       while (waitpid(data->child, &status, 0) == -1 && errno == EINTR)
-               continue;
-#if defined(_WIN32) && !defined(__CYGWIN__)
-       CloseHandle(data->child);
-#endif
+       do {
+               pid = waitpid(data->child, &status, 0);
+       } while (pid == -1 && errno == EINTR);
        data->child = 0;
 
-       if (status != 0) {
+       if (pid < 0 || status != 0) {
                archive_set_error(f->archive, EIO,
                    "Error closing program: %s", data->program_name);
                ret = ARCHIVE_FATAL;
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_zstd.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_zstd.c:1.6 pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_zstd.c:1.7
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_zstd.c:1.6    Sat Oct 19 05:39:59 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write_add_filter_zstd.c        Sun Nov  2 08:52:14 2025
@@ -391,6 +391,8 @@ archive_compressor_zstd_open(struct arch
 
        ZSTD_CCtx_setParameter(data->cstream, ZSTD_c_nbWorkers, data->threads);
 
+       ZSTD_CCtx_setParameter(data->cstream, ZSTD_c_checksumFlag, 1);
+
 #if ZSTD_VERSION_NUMBER >= MINVER_LONG
        ZSTD_CCtx_setParameter(data->cstream, ZSTD_c_windowLog, data->long_distance);
 #endif

Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_rar.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_rar.c:1.14 pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_rar.c:1.15
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_rar.c:1.14 Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_rar.c      Sun Nov  2 08:52:14 2025
@@ -1117,8 +1117,6 @@ archive_read_format_rar_read_data(struct
   if (rar->entry_eof || rar->offset_seek >= rar->unp_size) {
     *size = 0;
     *offset = rar->offset;
-    if (*offset < rar->unp_size)
-      *offset = rar->unp_size;
     return (ARCHIVE_EOF);
   }
 
@@ -1455,7 +1453,7 @@ read_header(struct archive_read *a, stru
     return (ARCHIVE_FATAL);
 #endif
   }
-  /* If no CRC error, Go on parsing File Header. */
+  /* If no CRC error, go on parsing File Header. */
   p = h;
   endp = p + header_size - 7;
   memcpy(&file_header, p, sizeof(file_header));
@@ -2368,8 +2366,8 @@ parse_codes(struct archive_read *a)
         return (ARCHIVE_FATAL);
       }
 
-      /* Make sure ppmd7_contest is freed before Ppmd7_Construct
-       * because reading a broken file cause this abnormal sequence. */
+      /* Make sure ppmd7_context is freed before Ppmd7_Construct
+       * because reading a broken file causes this abnormal sequence. */
       __archive_ppmd7_functions.Ppmd7_Free(&rar->ppmd7_context);
 
       rar->bytein.a = a;
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_xar.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_xar.c:1.14 pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_xar.c:1.15
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_xar.c:1.14 Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_xar.c      Sun Nov  2 08:52:14 2025
@@ -930,7 +930,7 @@ xar_read_data(struct archive_read *a,
 abort_read_data:
        *buff = NULL;
        *size = 0;
-       *offset = xar->total;
+       *offset = (int64_t)xar->entry_total;
        return (r);
 }
 

Index: pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_rar5.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_rar5.c:1.8 pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_rar5.c:1.9
--- pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_rar5.c:1.8 Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_read_support_format_rar5.c     Sun Nov  2 08:52:14 2025
@@ -1619,10 +1619,13 @@ static int process_head_file_extra(struc
 {
        uint64_t extra_field_size;
        uint64_t extra_field_id = 0;
-       int ret = ARCHIVE_FATAL;
        uint64_t var_size;
 
        while(extra_data_size > 0) {
+               /* Make sure we won't fail if the file declares only unsupported
+               attributes. */
+               int ret = ARCHIVE_OK;
+
                if(!read_var(a, &extra_field_size, &var_size))
                        return ARCHIVE_EOF;
 
@@ -1675,12 +1678,53 @@ static int process_head_file_extra(struc
                                if (ARCHIVE_OK != consume(a, extra_field_size)) {
                                        return ARCHIVE_EOF;
                                }
+
+                               /* Don't fail on unsupported attribute -- we've handled it
+                                  by skipping over it. */
+                               ret = ARCHIVE_OK;
+               }
+
+               if (ret != ARCHIVE_OK) {
+                       /* Forward any errors signalled by the attribute parsing
+                          functions. */
+                       return ret;
                }
        }
 
-       if(ret != ARCHIVE_OK) {
-               /* Attribute not implemented. */
-               return ret;
+       if (extra_data_size != 0) {
+               /* We didn't skip everything, or we skipped too much; either way,
+                  there's an error in this parsing function. */
+
+               archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+                               "unsupported structure of file header extra data");
+               return ARCHIVE_FATAL;
+       }
+
+       return ARCHIVE_OK;
+}
+
+static int file_entry_sanity_checks(struct archive_read* a,
+       size_t block_flags, uint8_t is_dir, uint64_t unpacked_size,
+       size_t packed_size)
+{
+       if (is_dir) {
+               const int declares_data_size =
+                       (int) (unpacked_size != 0 || packed_size != 0);
+
+               /* FILE entries for directories still declare HFL_DATA in block flags,
+                  even though attaching data to such blocks doesn't make much sense. */
+               if (declares_data_size) {
+                       archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+                               "directory entries cannot have any data");
+                       return ARCHIVE_FATAL;
+               }
+       } else {
+               const int declares_hfl_data = (int) ((block_flags & HFL_DATA) != 0);
+               if (!declares_hfl_data) {
+                       archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+                                       "no data found in file/service block");
+                       return ARCHIVE_FATAL;
+               }
        }
 
        return ARCHIVE_OK;
@@ -1701,6 +1745,7 @@ static int process_head_file(struct arch
        int c_method = 0, c_version = 0;
        char name_utf8_buf[MAX_NAME_IN_BYTES];
        const uint8_t* p;
+       int sanity_ret;
 
        enum FILE_FLAGS {
                DIRECTORY = 0x0001, UTIME = 0x0002, CRC32 = 0x0004,
@@ -1744,10 +1789,6 @@ static int process_head_file(struct arch
                rar->file.bytes_remaining = data_size;
        } else {
                rar->file.bytes_remaining = 0;
-
-               archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
-                               "no data found in file/service block");
-               return ARCHIVE_FATAL;
        }
 
        if(!read_var_sized(a, &file_flags, NULL))
@@ -1764,6 +1805,13 @@ static int process_head_file(struct arch
 
        rar->file.dir = (uint8_t) ((file_flags & DIRECTORY) > 0);
 
+       sanity_ret = file_entry_sanity_checks(a, block_flags, rar->file.dir,
+               unpacked_size, data_size);
+
+       if (sanity_ret != ARCHIVE_OK) {
+               return sanity_ret;
+       }
+
        if(!read_var_sized(a, &file_attr, NULL))
                return ARCHIVE_EOF;
 
@@ -4163,7 +4211,7 @@ static int rar5_read_data(struct archive
                 * it's impossible to perform any decompression. */
                archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
                    "Can't decompress an entry marked as a directory");
-               return ARCHIVE_FAILED;
+               return ARCHIVE_FATAL;
        }
 
        if(!rar->skip_mode && (rar->cstate.last_write_ptr > rar->file.unpacked_size)) {

Index: pkgsrc/archivers/libarchive/files/libarchive/archive_string.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_string.c:1.15 pkgsrc/archivers/libarchive/files/libarchive/archive_string.c:1.16
--- pkgsrc/archivers/libarchive/files/libarchive/archive_string.c:1.15  Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_string.c       Sun Nov  2 08:52:14 2025
@@ -2015,7 +2015,7 @@ archive_strncat_l(struct archive_string 
        /* We must allocate memory even if there is no data for conversion
         * or copy. This simulates archive_string_append behavior. */
        if (length == 0) {
-               int tn = 1;
+               size_t tn = 1;
                if (sc != NULL && (sc->flag & SCONV_TO_UTF16))
                        tn = 2;
                if (archive_string_ensure(as, as->length + tn) == NULL)
@@ -2752,7 +2752,8 @@ archive_string_append_unicode(struct arc
        char *p, *endp;
        uint32_t uc;
        size_t w;
-       int n, ret = 0, ts, tm;
+       size_t ts, tm;
+       int n, ret = 0;
        int (*parse)(uint32_t *, const char *, size_t);
        size_t (*unparse)(char *, size_t, uint32_t);
 
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write_disk_posix.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write_disk_posix.c:1.15 pkgsrc/archivers/libarchive/files/libarchive/archive_write_disk_posix.c:1.16
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write_disk_posix.c:1.15        Mon Apr 28 10:31:34 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write_disk_posix.c     Sun Nov  2 08:52:14 2025
@@ -2204,7 +2204,7 @@ restore_entry(struct archive_write_disk 
                                (void)clear_nochange_fflags(a);
 
                        if ((a->flags & ARCHIVE_EXTRACT_SAFE_WRITES) &&
-                           S_ISREG(a->st.st_mode)) {
+                           S_ISREG(a->mode)) {
                                /* Use a temporary file to extract */
                                if ((a->fd = la_mktemp(a)) == -1) {
                                        archive_set_error(&a->archive, errno,
@@ -2559,9 +2559,9 @@ _archive_write_disk_close(struct archive
                         * for directories. For other file types
                         * we need to verify via fstat() or lstat()
                         */
-                       if (fd == -1 || p->filetype != AE_IFDIR) {
+                       if (fd < 0 || p->filetype != AE_IFDIR) {
 #if HAVE_FSTAT
-                               if (fd > 0 && (
+                               if (fd >= 0 && (
                                    fstat(fd, &st) != 0 ||
                                    la_verify_filetype(st.st_mode,
                                    p->filetype) == 0)) {
@@ -3930,10 +3930,14 @@ clear_nochange_fflags(struct archive_wri
 #ifdef UF_APPEND
            | UF_APPEND
 #endif
-#ifdef EXT2_APPEND_FL
+#if defined(FS_APPEND_FL)
+           | FS_APPEND_FL
+#elif defined(EXT2_APPEND_FL)
            | EXT2_APPEND_FL
 #endif
-#ifdef EXT2_IMMUTABLE_FL
+#if defined(FS_IMMUTABLE_FL)
+           | FS_IMMUTABLE_FL
+#elif defined(EXT2_IMMUTABLE_FL)
            | EXT2_IMMUTABLE_FL
 #endif
        ;
@@ -4437,7 +4441,7 @@ fixup_appledouble(struct archive_write_d
         */
        fd = open(pathname, O_RDONLY | O_BINARY | O_CLOEXEC);
        __archive_ensure_cloexec_flag(fd);
-       if (fd == -1) {
+       if (fd < 0) {
                archive_set_error(&a->archive, errno,
                    "Failed to open a restoring file");
                ret = ARCHIVE_WARN;

Index: pkgsrc/archivers/libarchive/files/libarchive/archive_windows.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_windows.c:1.11 pkgsrc/archivers/libarchive/files/libarchive/archive_windows.c:1.12
--- pkgsrc/archivers/libarchive/files/libarchive/archive_windows.c:1.11 Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_windows.c      Sun Nov  2 08:52:14 2025
@@ -45,6 +45,7 @@
 #if defined(_WIN32) && !defined(__CYGWIN__)
 
 #include "archive_platform.h"
+#include "archive_platform_stat.h"
 #include "archive_private.h"
 #include "archive_entry.h"
 #include "archive_time_private.h"
@@ -313,6 +314,10 @@ __la_open(const char *path, int flags, .
        pmode = va_arg(ap, int);
        va_end(ap);
        ws = NULL;
+
+       /* _(w)sopen_s fails if we provide any other modes */
+       pmode = pmode & (_S_IREAD | _S_IWRITE);
+
        if ((flags & ~O_BINARY) == O_RDONLY) {
                /*
                 * When we open a directory, _open function returns
@@ -374,7 +379,7 @@ __la_open(const char *path, int flags, .
                   TODO: Fix mode of new file.  */
                r = _open(path, flags);
 #else
-               r = _open(path, flags, pmode);
+               _sopen_s(&r, path, flags, _SH_DENYNO, pmode);
 #endif
                if (r < 0 && errno == EACCES && (flags & O_CREAT) != 0) {
                        /* Simulate other POSIX system action to pass our test suite. */
@@ -395,7 +400,7 @@ __la_open(const char *path, int flags, .
                        return (-1);
                }
        }
-       r = _wopen(ws, flags, pmode);
+       _wsopen_s(&r, ws, flags, _SH_DENYNO, pmode);
        if (r < 0 && errno == EACCES && (flags & O_CREAT) != 0) {
                /* Simulate other POSIX system action to pass our test suite. */
                attr = GetFileAttributesW(ws);
@@ -410,6 +415,93 @@ __la_open(const char *path, int flags, .
        return (r);
 }
 
+int
+__la_wopen(const wchar_t *path, int flags, ...)
+{
+       va_list ap;
+       wchar_t *fullpath;
+       int r, pmode;
+       DWORD attr;
+
+       va_start(ap, flags);
+       pmode = va_arg(ap, int);
+       va_end(ap);
+       fullpath = NULL;
+
+       /* _(w)sopen_s fails if we provide any other modes */
+       pmode = pmode & (_S_IREAD | _S_IWRITE);
+
+       if ((flags & ~O_BINARY) == O_RDONLY) {
+               /*
+                * When we open a directory, _open function returns
+                * "Permission denied" error.
+                */
+               attr = GetFileAttributesW(path);
+#if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
+               if (attr == (DWORD)-1 && GetLastError() == ERROR_PATH_NOT_FOUND)
+#endif
+               {
+                       fullpath = __la_win_permissive_name_w(path);
+                       if (fullpath == NULL) {
+                               errno = EINVAL;
+                               return (-1);
+                       }
+                       path = fullpath;
+                       attr = GetFileAttributesW(fullpath);
+               }
+               if (attr == (DWORD)-1) {
+                       la_dosmaperr(GetLastError());
+                       free(fullpath);
+                       return (-1);
+               }
+               if (attr & FILE_ATTRIBUTE_DIRECTORY) {
+                       HANDLE handle;
+#if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
+                       if (fullpath != NULL)
+                               handle = CreateFileW(fullpath, 0, 0, NULL,
+                                   OPEN_EXISTING,
+                                   FILE_FLAG_BACKUP_SEMANTICS |
+                                   FILE_ATTRIBUTE_READONLY,
+                                       NULL);
+                       else
+                               handle = CreateFileW(path, 0, 0, NULL,
+                                   OPEN_EXISTING,
+                                   FILE_FLAG_BACKUP_SEMANTICS |
+                                   FILE_ATTRIBUTE_READONLY,
+                                       NULL);
+#else /* !WINAPI_PARTITION_DESKTOP */
+                       CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+                       ZeroMemory(&createExParams, sizeof(createExParams));
+                       createExParams.dwSize = sizeof(createExParams);
+                       createExParams.dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+                       createExParams.dwFileFlags = FILE_FLAG_BACKUP_SEMANTICS;
+                       handle = CreateFile2(fullpath, 0, 0,
+                               OPEN_EXISTING, &createExParams);
+#endif /* !WINAPI_PARTITION_DESKTOP */
+                       free(fullpath);
+                       if (handle == INVALID_HANDLE_VALUE) {
+                               la_dosmaperr(GetLastError());
+                               return (-1);
+                       }
+                       r = _open_osfhandle((intptr_t)handle, _O_RDONLY);
+                       return (r);
+               }
+       }
+       _wsopen_s(&r, path, flags, _SH_DENYNO, pmode);
+       if (r < 0 && errno == EACCES && (flags & O_CREAT) != 0) {
+               /* Simulate other POSIX system action to pass our test suite. */
+               attr = GetFileAttributesW(path);
+               if (attr == (DWORD)-1)
+                       la_dosmaperr(GetLastError());
+               else if (attr & FILE_ATTRIBUTE_DIRECTORY)
+                       errno = EISDIR;
+               else
+                       errno = EACCES;
+       }
+       free(fullpath);
+       return (r);
+}
+
 ssize_t
 __la_read(int fd, void *buf, size_t nbytes)
 {
@@ -561,6 +653,8 @@ copy_stat(struct stat *st, struct ustat 
        st->st_mode = us->st_mode;
        st->st_nlink = us->st_nlink;
        st->st_size = (off_t)us->st_size;
+       if (st->st_size < 0 || (uint64_t)st->st_size != us->st_size)
+               st->st_size = 0;
        st->st_uid = us->st_uid;
        st->st_dev = us->st_dev;
        st->st_rdev = us->st_rdev;
@@ -630,6 +724,53 @@ __la_stat(const char *path, struct stat 
        return (ret);
 }
 
+static void
+copy_seek_stat(la_seek_stat_t *st, struct ustat *us)
+{
+       st->st_mtime = us->st_mtime;
+       st->st_gid = us->st_gid;
+       st->st_ino = getino(us);
+       st->st_mode = us->st_mode;
+       st->st_nlink = us->st_nlink;
+       st->st_size = (la_seek_t)us->st_size;
+       if (st->st_size < 0 || (uint64_t)st->st_size != us->st_size)
+               st->st_size = -1;
+       st->st_uid = us->st_uid;
+       st->st_dev = us->st_dev;
+       st->st_rdev = us->st_rdev;
+}
+
+int
+__la_seek_fstat(int fd, la_seek_stat_t *st)
+{
+       struct ustat u;
+       int ret;
+
+       ret = __hstat((HANDLE)_get_osfhandle(fd), &u);
+       copy_seek_stat(st, &u);
+       return (ret);
+}
+
+int
+__la_seek_stat(const char *path, la_seek_stat_t *st)
+{
+       HANDLE handle;
+       struct ustat u;
+       int ret;
+
+       handle = la_CreateFile(path, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING,
+               FILE_FLAG_BACKUP_SEMANTICS,
+               NULL);
+       if (handle == INVALID_HANDLE_VALUE) {
+               la_dosmaperr(GetLastError());
+               return (-1);
+       }
+       ret = __hstat(handle, &u);
+       CloseHandle(handle);
+       copy_seek_stat(st, &u);
+       return (ret);
+}
+
 /*
  * This waitpid is limited implementation.
  */
@@ -641,13 +782,14 @@ __la_waitpid(HANDLE child, int *status, 
        (void)option;/* UNUSED */
        do {
                if (GetExitCodeProcess(child, &cs) == 0) {
-                       CloseHandle(child);
                        la_dosmaperr(GetLastError());
+                       CloseHandle(child);
                        *status = 0;
                        return (-1);
                }
        } while (cs == STILL_ACTIVE);
 
+       CloseHandle(child);
        *status = (int)(cs & 0xff);
        return (0);
 }
Index: pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_mtree.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_mtree.c:1.11 pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_mtree.c:1.12
--- pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_mtree.c:1.11  Tue Jul  1 15:14:44 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/archive_write_set_format_mtree.c       Sun Nov  2 08:52:15 2025
@@ -1927,7 +1927,7 @@ mtree_entry_setup_filenames(struct archi
        }
 
        /*
-        * Find out the position which points the last position of
+        * Find out the position which points to the last position of
         * path separator('/').
         */
        slash = NULL;
@@ -2024,7 +2024,7 @@ mtree_entry_add_child_tail(struct mtree_
 }
 
 /*
- * Find a entry from a parent entry with the name.
+ * Find an entry from a parent entry with given name.
  */
 static struct mtree_entry *
 mtree_entry_find_child(struct mtree_entry *parent, const char *child_name)
@@ -2148,10 +2148,10 @@ mtree_entry_tree_add(struct archive_writ
 
                /* Find next sub directory. */
                if (!np->dir_info) {
-                       /* NOT Directory! */
+                       /* NOT a directory! */
                        archive_set_error(&a->archive,
                            ARCHIVE_ERRNO_MISC,
-                           "`%s' is not directory, we cannot insert `%s' ",
+                           "`%s' is not a directory, we cannot insert `%s' ",
                            np->pathname.s, file->pathname.s);
                        return (ARCHIVE_FAILED);
                }
@@ -2243,10 +2243,7 @@ mtree_entry_tree_add(struct archive_writ
        }
 
 same_entry:
-       /*
-        * We have already has the entry the filename of which is
-        * the same.
-        */
+       /* We already have an entry with same filename. */
        r = mtree_entry_exchange_same_entry(a, np, file);
        if (r < ARCHIVE_WARN)
                return (r);
@@ -2264,13 +2261,13 @@ mtree_entry_exchange_same_entry(struct a
 
        if ((np->mode & AE_IFMT) != (file->mode & AE_IFMT)) {
                archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
-                   "Found duplicate entries `%s' and its file type is "
-                   "different",
+                   "Found duplicate entries for `%s' with "
+                   "differing file types.",
                    np->pathname.s);
                return (ARCHIVE_FAILED);
        }
 
-       /* Update the existent mtree entry's attributes by the new one's. */
+       /* Update the existing mtree entry's attributes by the new one's. */
        archive_string_empty(&np->symlink);
        archive_string_concat(&np->symlink, &file->symlink);
        archive_string_empty(&np->uname);

Index: pkgsrc/archivers/libarchive/files/libarchive/test/CMakeLists.txt
diff -u pkgsrc/archivers/libarchive/files/libarchive/test/CMakeLists.txt:1.16 pkgsrc/archivers/libarchive/files/libarchive/test/CMakeLists.txt:1.17
--- pkgsrc/archivers/libarchive/files/libarchive/test/CMakeLists.txt:1.16       Tue Jul  1 15:14:45 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/test/CMakeLists.txt    Sun Nov  2 08:52:15 2025
@@ -168,6 +168,7 @@ IF(ENABLE_TEST)
     test_read_format_rar5.c
     test_read_format_raw.c
     test_read_format_tar.c
+    test_read_format_tar_V_negative_size.c
     test_read_format_tar_concatenated.c
     test_read_format_tar_empty_filename.c
     test_read_format_tar_empty_with_gnulabel.c

Index: pkgsrc/archivers/libarchive/files/libarchive/test/list.h
diff -u pkgsrc/archivers/libarchive/files/libarchive/test/list.h:1.18 pkgsrc/archivers/libarchive/files/libarchive/test/list.h:1.19
--- pkgsrc/archivers/libarchive/files/libarchive/test/list.h:1.18       Tue Jul  1 15:14:45 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/test/list.h    Sun Nov  2 08:52:15 2025
@@ -379,6 +379,7 @@ DEFINE_TEST(test_read_format_rar5_trunca
 DEFINE_TEST(test_read_format_rar5_invalid_dict_reference)
 DEFINE_TEST(test_read_format_rar5_distance_overflow)
 DEFINE_TEST(test_read_format_rar5_nonempty_dir_stream)
+DEFINE_TEST(test_read_format_rar5_nonempty_dir_data)
 DEFINE_TEST(test_read_format_rar5_fileattr)
 DEFINE_TEST(test_read_format_rar5_different_window_size)
 DEFINE_TEST(test_read_format_rar5_window_buf_and_size_desync)
@@ -391,6 +392,9 @@ DEFINE_TEST(test_read_format_rar5_decode
 DEFINE_TEST(test_read_format_rar5_bad_window_size_in_multiarchive_file)
 DEFINE_TEST(test_read_format_rar5_read_data_block_uninitialized_offset)
 DEFINE_TEST(test_read_format_rar5_data_ready_pointer_leak)
+DEFINE_TEST(test_read_format_rar5_only_crypt_exfld)
+DEFINE_TEST(test_read_format_rar5_only_unsupported_exfld)
+DEFINE_TEST(test_read_format_rar5_invalidhash_and_validhtime_exfld)
 DEFINE_TEST(test_read_format_rar4_encrypted)
 DEFINE_TEST(test_read_format_rar4_encrypted_filenames)
 DEFINE_TEST(test_read_format_rar4_solid_encrypted)
@@ -407,6 +411,7 @@ DEFINE_TEST(test_read_format_rar_invalid
 DEFINE_TEST(test_read_format_rar_overflow)
 DEFINE_TEST(test_read_format_raw)
 DEFINE_TEST(test_read_format_tar)
+DEFINE_TEST(test_read_format_tar_V_negative_size)
 DEFINE_TEST(test_read_format_tar_concatenated)
 DEFINE_TEST(test_read_format_tar_empty_filename)
 DEFINE_TEST(test_read_format_tar_empty_pax)

Index: pkgsrc/archivers/libarchive/files/libarchive/test/test_acl_nfs4.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/test/test_acl_nfs4.c:1.3 pkgsrc/archivers/libarchive/files/libarchive/test/test_acl_nfs4.c:1.4
--- pkgsrc/archivers/libarchive/files/libarchive/test/test_acl_nfs4.c:1.3       Fri Apr 12 15:39:53 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/test/test_acl_nfs4.c   Sun Nov  2 08:52:15 2025
@@ -145,6 +145,13 @@ static struct archive_test_acl_t acls_ba
          ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" },
        { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE,
          ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" },
+
+       /* Multiple types */
+       { ARCHIVE_ENTRY_ACL_TYPE_ALLOW | ARCHIVE_ENTRY_ACL_TYPE_AUDIT,
+         ARCHIVE_ENTRY_ACL_EXECUTE,
+         ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" },
+       { ARCHIVE_ENTRY_ACL_TYPE_NFS4, ARCHIVE_ENTRY_ACL_EXECUTE,
+         ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" },
 };
 
 DEFINE_TEST(test_acl_nfs4)
Index: pkgsrc/archivers/libarchive/files/libarchive/test/test_read_set_format.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/test/test_read_set_format.c:1.3 pkgsrc/archivers/libarchive/files/libarchive/test/test_read_set_format.c:1.4
--- pkgsrc/archivers/libarchive/files/libarchive/test/test_read_set_format.c:1.3        Thu Jan 18 18:00:20 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/test/test_read_set_format.c    Sun Nov  2 08:52:15 2025
@@ -138,7 +138,10 @@ DEFINE_TEST(test_read_append_filter)
     assertEqualInt(ARCHIVE_OK, archive_read_free(a));
     return;
   }
-  assertEqualIntA(a, ARCHIVE_OK, r);
+  if (r == ARCHIVE_WARN && canGzip())
+    assertEqualString(archive_error_string(a), "Using external gzip program");
+  else
+    assertEqualIntA(a, ARCHIVE_OK, r);
   assertEqualInt(ARCHIVE_OK,
       archive_read_open_memory(a, archive, sizeof(archive)));
   assertEqualInt(ARCHIVE_OK, archive_read_next_header(a, &ae));
@@ -210,7 +213,7 @@ DEFINE_TEST(test_read_append_filter_wron
   /*
    * If we have "bunzip2 -q", try using that.
    */
-  if (!canRunCommand("bunzip2 -h")) {
+  if (!canRunCommand("bunzip2 -h", NULL)) {
     skipping("Can't run bunzip2 program on this platform");
     return;
   }
Index: pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_gzip_timestamp.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_gzip_timestamp.c:1.3 pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_gzip_timestamp.c:1.4
--- pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_gzip_timestamp.c:1.3    Sat Oct 19 05:39:59 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_gzip_timestamp.c        Sun Nov  2 08:52:15 2025
@@ -81,8 +81,11 @@ DEFINE_TEST(test_write_filter_gzip_times
        archive_entry_free(ae);
        assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
        assertEqualInt(ARCHIVE_OK, archive_write_free(a));
-       failure("Timestamp should be recorded");
-       assert(memcmp(buff + 4, "\x00\x00\x00\x00", 4) != 0);
+       /* External gzip program might not save timestamp */
+       if (!use_prog) {
+               failure("Timestamp should be recorded");
+               assert(memcmp(buff + 4, "\x00\x00\x00\x00", 4) != 0);
+       }
 
        /* Test2: set "gzip:!timestamp" option. */
        assert((a = archive_write_new()) != NULL);

Index: pkgsrc/archivers/libarchive/files/libarchive/test/test_acl_posix1e.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/test/test_acl_posix1e.c:1.4 pkgsrc/archivers/libarchive/files/libarchive/test/test_acl_posix1e.c:1.5
--- pkgsrc/archivers/libarchive/files/libarchive/test/test_acl_posix1e.c:1.4    Mon Apr 28 10:31:34 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/test/test_acl_posix1e.c        Sun Nov  2 08:52:15 2025
@@ -94,6 +94,11 @@ static struct archive_test_acl_t acls_nf
        { ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
          ARCHIVE_ENTRY_ACL_READ | ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT,
          ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+
+       /* Invalid type codes */
+       { ARCHIVE_ENTRY_ACL_TYPE_ACCESS | ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,
+         ARCHIVE_ENTRY_ACL_READ,
+         ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
 };
 
 DEFINE_TEST(test_acl_posix1e)
Index: pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_bzip2.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_bzip2.c:1.4 pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_bzip2.c:1.5
--- pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_bzip2.c:1.4     Sat Oct 19 05:39:59 2024
+++ pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_bzip2.c Sun Nov  2 08:52:15 2025
@@ -268,6 +268,35 @@ DEFINE_TEST(test_write_filter_bzip2)
        assertEqualInt(ARCHIVE_OK, archive_write_free(a));
 
        /*
+        * Test behavior after a fatal error (triggered by giving
+        * archive_write_open_memory() a very small buffer).
+        */
+       if (!use_prog) {
+               used1 = 0;
+               assert((a = archive_write_new()) != NULL);
+               assertEqualIntA(a, ARCHIVE_OK,
+                   archive_write_set_format_ustar(a));
+               assertEqualIntA(a, ARCHIVE_OK,
+                   archive_write_add_filter_bzip2(a));
+               assertEqualIntA(a, ARCHIVE_OK,
+                   archive_write_open_memory(a, buff, 100, &used1));
+               assert((ae = archive_entry_new()) != NULL);
+               archive_entry_set_filetype(ae, AE_IFREG);
+               archive_entry_set_size(ae, 4000000);
+               archive_entry_copy_pathname(ae, "file");
+               assertEqualIntA(a, ARCHIVE_OK,
+                   archive_write_header(a, ae));
+               for (i = 0; i < 1000000; i++) {
+                       r = archive_write_data(a, &i, 4);
+                       if (r == ARCHIVE_FATAL)
+                               break;
+               }
+               assertEqualIntA(a, ARCHIVE_FATAL, r);
+               archive_entry_free(ae);
+               assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+       }
+
+       /*
         * Clean up.
         */
        free(data);

Index: pkgsrc/archivers/libarchive/files/libarchive/test/test_archive_string_conversion.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/test/test_archive_string_conversion.c:1.6 pkgsrc/archivers/libarchive/files/libarchive/test/test_archive_string_conversion.c:1.7
--- pkgsrc/archivers/libarchive/files/libarchive/test/test_archive_string_conversion.c:1.6      Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/test/test_archive_string_conversion.c  Sun Nov  2 08:52:15 2025
@@ -991,6 +991,7 @@ DEFINE_TEST(test_archive_string_update_u
        static const char koi8_string[] = "\xD0\xD2\xC9";
        static const wchar_t wcs_string[] = L"\U0000043f\U00000440\U00000438";
        struct archive_mstring mstr;
+       struct archive *a;
        int r;
 
        memset(&mstr, 0, sizeof(mstr));
@@ -999,6 +1000,15 @@ DEFINE_TEST(test_archive_string_update_u
                skipping("KOI8-R locale not available on this system.");
                return;
        }
+       a = archive_write_new();
+       assertEqualInt(ARCHIVE_OK, archive_write_set_format_pax(a));
+       if (archive_write_set_options(a, "hdrcharset=UTF-8") != ARCHIVE_OK) {
+               skipping("This system cannot convert character-set"
+                   " from KOI8-R to UTF-8.");
+               archive_write_free(a);
+               return;
+       }
+       archive_write_free(a);
 
        r = archive_mstring_update_utf8(NULL, &mstr, utf8_string);
 
Index: pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_gzip.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_gzip.c:1.6 pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_gzip.c:1.7
--- pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_gzip.c:1.6      Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/test/test_write_filter_gzip.c  Sun Nov  2 08:52:15 2025
@@ -166,9 +166,15 @@ DEFINE_TEST(test_write_filter_gzip)
        assertEqualInt(rbuff[0], 0x1f);
        assertEqualInt(rbuff[1], 0x8b);
        assertEqualInt(rbuff[2], 0x08);
-       assertEqualInt(rbuff[3], 0x08);
-       assertEqualInt(rbuff[8], 2); /* RFC 1952 flag for compression level 9 */
-       assertEqualString((const char*)rbuff+10, "testorgfilename");
+       /* RFC 1952 flag for compression level 9 */
+       assertEqualInt(rbuff[8], 2);
+       /* External gzip program might not save filename */
+       if (!use_prog || rbuff[3] == 0x08) {
+               assertEqualInt(rbuff[3], 0x08);
+               assertEqualString((const char*)rbuff+10, "testorgfilename");
+       } else {
+               assertEqualInt(rbuff[3], 0x00);
+       }
 
        /* Curiously, this test fails; the test data above compresses
         * better at default compression than at level 9. */

Index: pkgsrc/archivers/libarchive/files/libarchive/test/test_entry.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/test/test_entry.c:1.10 pkgsrc/archivers/libarchive/files/libarchive/test/test_entry.c:1.11
--- pkgsrc/archivers/libarchive/files/libarchive/test/test_entry.c:1.10 Tue Jul  1 15:14:45 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/test/test_entry.c      Sun Nov  2 08:52:15 2025
@@ -880,6 +880,17 @@ DEFINE_TEST(test_entry)
        if (pst == NULL)
                return;
        assertEqualInt(pst->st_uid, 22);
+
+       /* Check behavior with large sizes. */
+       archive_entry_set_size(e, INT64_MAX - 1);
+       assert((pst = archive_entry_stat(e)) != NULL);
+       if (pst == NULL)
+               return;
+       if (sizeof(pst->st_size) < sizeof(int64_t))
+               assertEqualInt(pst->st_size, 0);
+       else
+               assertEqualInt(pst->st_size, INT64_MAX - 1);
+
        /* We don't need to check high-res fields here. */
 
        /*

Index: pkgsrc/archivers/libarchive/files/libarchive/test/test_read_format_7zip.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/test/test_read_format_7zip.c:1.9 pkgsrc/archivers/libarchive/files/libarchive/test/test_read_format_7zip.c:1.10
--- pkgsrc/archivers/libarchive/files/libarchive/test/test_read_format_7zip.c:1.9       Wed May 21 15:25:51 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/test/test_read_format_7zip.c   Sun Nov  2 08:52:15 2025
@@ -1285,19 +1285,26 @@ DEFINE_TEST(test_read_format_7zip_sfx_pe
        const char test_txt[] = "123";
        int size = sizeof(test_txt) - 1;
 
-       extract_reference_file(reffile);
        assert((a = archive_read_new()) != NULL);
-       assertA(0 == archive_read_support_filter_all(a));
-       assertA(0 == archive_read_support_format_all(a));
-       assertA(0 == archive_read_open_filename(a, reffile, bs));
 
-       assertA(0 == archive_read_next_header(a, &ae));
-       assertEqualString("test.txt.txt", archive_entry_pathname(ae));
+       if (ARCHIVE_OK != archive_read_support_filter_lzma(a)) {
+               skipping(
+                   "7zip:lzma decoding is not supported on this platform");
+       } else {
+               extract_reference_file(reffile);
+               assertA(0 == archive_read_support_filter_all(a));
+               assertA(0 == archive_read_support_format_all(a));
+               assertA(0 == archive_read_open_filename(a, reffile, bs));
 
-       assertA(size == archive_read_data(a, buff, size));
-       assertEqualMem(buff, test_txt, size);
+               assertA(0 == archive_read_next_header(a, &ae));
+               assertEqualString("test.txt.txt", archive_entry_pathname(ae));
+
+               assertA(size == archive_read_data(a, buff, size));
+               assertEqualMem(buff, test_txt, size);
+
+               assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+       }
 
-       assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
        assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 }
 
@@ -1316,19 +1323,26 @@ DEFINE_TEST(test_read_format_7zip_sfx_mo
        const char test_txt[] = "123";
        int size = sizeof(test_txt) - 1;
 
-       extract_reference_file(reffile);
        assert((a = archive_read_new()) != NULL);
-       assertA(0 == archive_read_support_filter_all(a));
-       assertA(0 == archive_read_support_format_all(a));
-       assertA(0 == archive_read_open_filename(a, reffile, bs));
 
-       assertA(0 == archive_read_next_header(a, &ae));
-       assertEqualString("test.txt.txt", archive_entry_pathname(ae));
+       if (ARCHIVE_OK != archive_read_support_filter_lzma(a)) {
+               skipping(
+                   "7zip:lzma decoding is not supported on this platform");
+       } else {
+               extract_reference_file(reffile);
+               assertA(0 == archive_read_support_filter_all(a));
+               assertA(0 == archive_read_support_format_all(a));
+               assertA(0 == archive_read_open_filename(a, reffile, bs));
+
+               assertA(0 == archive_read_next_header(a, &ae));
+               assertEqualString("test.txt.txt", archive_entry_pathname(ae));
+
+               assertA(size == archive_read_data(a, buff, size));
+               assertEqualMem(buff, test_txt, size);
 
-       assertA(size == archive_read_data(a, buff, size));
-       assertEqualMem(buff, test_txt, size);
+               assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+       }
 
-       assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
        assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 }
 
@@ -1346,20 +1360,27 @@ DEFINE_TEST(test_read_format_7zip_sfx_el
        const char test_txt[] = "123";
        int size = sizeof(test_txt) - 1;
 
-       extract_reference_file(reffile);
        assert((a = archive_read_new()) != NULL);
-       assertA(0 == archive_read_support_filter_all(a));
-       assertA(0 == archive_read_support_format_all(a));
-       assertA(0 == archive_read_open_filename(a, reffile, bs));
 
-       assertA(0 == archive_read_next_header(a, &ae));
-       assertEqualString("test.txt.txt", archive_entry_pathname(ae));
+       if (ARCHIVE_OK != archive_read_support_filter_lzma(a)) {
+               skipping(
+                   "7zip:lzma decoding is not supported on this platform");
+       } else {
+               extract_reference_file(reffile);
+               assertA(0 == archive_read_support_filter_all(a));
+               assertA(0 == archive_read_support_format_all(a));
+               assertA(0 == archive_read_open_filename(a, reffile, bs));
+
+               assertA(0 == archive_read_next_header(a, &ae));
+               assertEqualString("test.txt.txt", archive_entry_pathname(ae));
 
-       assertA(size == archive_read_data(a, buff, size));
-       assertEqualMem(buff, test_txt, size);
+               assertA(size == archive_read_data(a, buff, size));
+               assertEqualMem(buff, test_txt, size);
 
-       assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
-  assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+               assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+       }
+
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 }
 
 DEFINE_TEST(test_read_format_7zip_extract_second)
@@ -1597,9 +1618,9 @@ DEFINE_TEST(test_read_format_7zip_lzma2_
 
        assert((a = archive_read_new()) != NULL);
 
-       if (ARCHIVE_OK != archive_read_support_filter_gzip(a)) {
+       if (ARCHIVE_OK != archive_read_support_filter_lzma(a)) {
                skipping(
-                   "7zip:deflate decoding is not supported on this platform");
+                   "7zip:lzma decoding is not supported on this platform");
        } else {
                test_powerpc_filter("test_read_format_7zip_lzma2_powerpc.7z");
        }

Index: pkgsrc/archivers/libarchive/files/libarchive/test/test_read_format_rar5.c
diff -u pkgsrc/archivers/libarchive/files/libarchive/test/test_read_format_rar5.c:1.8 pkgsrc/archivers/libarchive/files/libarchive/test/test_read_format_rar5.c:1.9
--- pkgsrc/archivers/libarchive/files/libarchive/test/test_read_format_rar5.c:1.8       Tue Jul  1 15:14:45 2025
+++ pkgsrc/archivers/libarchive/files/libarchive/test/test_read_format_rar5.c   Sun Nov  2 08:52:15 2025
@@ -1111,6 +1111,18 @@ DEFINE_TEST(test_read_format_rar5_nonemp
        EPILOGUE();
 }
 
+DEFINE_TEST(test_read_format_rar5_nonempty_dir_data)
+{
+       PROLOGUE("test_read_format_rar5_dirdata.rar");
+
+       /* This archive is invalid. It declares a directory entry with nonzero
+          data size. */
+
+       assertA(archive_read_next_header(a, &ae) == ARCHIVE_FATAL);
+
+       EPILOGUE();
+}
+
 DEFINE_TEST(test_read_format_rar5_fileattr)
 {
        unsigned long set, clear, flag;
@@ -1428,3 +1440,57 @@ DEFINE_TEST(test_read_format_rar5_data_r
 
        EPILOGUE();
 }
+
+DEFINE_TEST(test_read_format_rar5_only_crypt_exfld)
+{
+       /* GH #2711 */
+
+       char buf[4096];
+       PROLOGUE("test_read_format_rar5_only_crypt_exfld.rar");
+
+       /* The reader should allow iteration through files, but should fail
+          during data extraction. */
+
+       assertA(archive_read_next_header(a, &ae) == ARCHIVE_OK);
+       assertA(archive_read_data(a, buf, sizeof(buf)) == ARCHIVE_FATAL);
+
+       /* The reader should also provide a valid error message. */
+       assertA(archive_error_string(a) != NULL);
+
+       EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_only_unsupported_exfld)
+{
+       /* GH #2711 */
+
+       char buf[4096];
+       PROLOGUE("test_read_format_rar5_unsupported_exfld.rar");
+
+       /* The reader should allow iteration through files, and it should
+          succeed with data extraction. */
+
+       assertA(archive_read_next_header(a, &ae) == ARCHIVE_OK);
+
+       /* 48 is the expected number of bytes that should be extracted */
+       assertA(archive_read_data(a, buf, sizeof(buf)) == 48);
+
+       EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_invalidhash_and_validhtime_exfld)
+{
+       /* GH #2711 */
+
+       char buf[4096];
+       PROLOGUE("test_read_format_rar5_invalid_hash_valid_htime_exfld.rar");
+
+       /* The reader should report an error when trying to process this data.
+          Returning EOF here means that the reader has failed to identify
+          malformed structure. */
+
+       assertA(archive_read_next_header(a, &ae) < 0);
+       assertA(archive_read_data(a, buf, sizeof(buf)) < 0);
+
+       EPILOGUE();
+}

Index: pkgsrc/archivers/libarchive/files/libarchive_fe/line_reader.c
diff -u pkgsrc/archivers/libarchive/files/libarchive_fe/line_reader.c:1.4 pkgsrc/archivers/libarchive/files/libarchive_fe/line_reader.c:1.5
--- pkgsrc/archivers/libarchive/files/libarchive_fe/line_reader.c:1.4   Fri Apr 12 15:39:57 2024
+++ pkgsrc/archivers/libarchive/files/libarchive_fe/line_reader.c       Sun Nov  2 08:52:15 2025
@@ -31,7 +31,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "err.h"
+#include "lafe_err.h"
 #include "line_reader.h"
 
 #if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__BORLANDC__)

Index: pkgsrc/archivers/libarchive/files/libarchive_fe/passphrase.c
diff -u pkgsrc/archivers/libarchive/files/libarchive_fe/passphrase.c:1.9 pkgsrc/archivers/libarchive/files/libarchive_fe/passphrase.c:1.10
--- pkgsrc/archivers/libarchive/files/libarchive_fe/passphrase.c:1.9    Mon Apr 28 10:31:34 2025
+++ pkgsrc/archivers/libarchive/files/libarchive_fe/passphrase.c        Sun Nov  2 08:52:15 2025
@@ -61,7 +61,7 @@
 #include <readpassphrase.h>
 #endif
 
-#include "err.h"
+#include "lafe_err.h"
 #include "passphrase.h"
 
 #ifndef HAVE_READPASSPHRASE

Index: pkgsrc/archivers/libarchive/files/tar/CMakeLists.txt
diff -u pkgsrc/archivers/libarchive/files/tar/CMakeLists.txt:1.5 pkgsrc/archivers/libarchive/files/tar/CMakeLists.txt:1.6
--- pkgsrc/archivers/libarchive/files/tar/CMakeLists.txt:1.5    Wed May 21 15:25:52 2025
+++ pkgsrc/archivers/libarchive/files/tar/CMakeLists.txt        Sun Nov  2 08:52:15 2025
@@ -18,8 +18,8 @@ IF(ENABLE_TAR)
     subst.c
     util.c
     write.c
-    ../libarchive_fe/err.c
-    ../libarchive_fe/err.h
+    ../libarchive_fe/lafe_err.c
+    ../libarchive_fe/lafe_err.h
     ../libarchive_fe/lafe_platform.h
     ../libarchive_fe/line_reader.c
     ../libarchive_fe/line_reader.h

Index: pkgsrc/archivers/libarchive/files/tar/bsdtar.c
diff -u pkgsrc/archivers/libarchive/files/tar/bsdtar.c:1.17 pkgsrc/archivers/libarchive/files/tar/bsdtar.c:1.18
--- pkgsrc/archivers/libarchive/files/tar/bsdtar.c:1.17 Wed May 21 15:25:52 2025
+++ pkgsrc/archivers/libarchive/files/tar/bsdtar.c      Sun Nov  2 08:52:15 2025
@@ -55,7 +55,7 @@
 #endif
 
 #include "bsdtar.h"
-#include "err.h"
+#include "lafe_err.h"
 
 #if ARCHIVE_VERSION_NUMBER < 4000000 && !defined(_PATH_DEFTAPE)
 // Libarchive 4.0 and later will NOT define _PATH_DEFTAPE
@@ -183,6 +183,11 @@ main(int argc, char **argv)
                sa.sa_handler = SIG_IGN;
                sigaction(SIGPIPE, &sa, NULL);
 #endif
+#ifdef SIGCHLD
+               /* Do not ignore SIGCHLD. */
+               sa.sa_handler = SIG_DFL;
+               sigaction(SIGCHLD, &sa, NULL);
+#endif
        }
 #endif
 

Index: pkgsrc/archivers/libarchive/files/tar/bsdtar.h
diff -u pkgsrc/archivers/libarchive/files/tar/bsdtar.h:1.14 pkgsrc/archivers/libarchive/files/tar/bsdtar.h:1.15
--- pkgsrc/archivers/libarchive/files/tar/bsdtar.h:1.14 Wed May 21 15:25:52 2025
+++ pkgsrc/archivers/libarchive/files/tar/bsdtar.h      Sun Nov  2 08:52:15 2025
@@ -16,6 +16,12 @@
 #define ENV_WRITER_OPTIONS     "TAR_WRITER_OPTIONS"
 #define IGNORE_WRONG_MODULE_NAME "__ignore_wrong_module_name__,"
 
+#if defined(_MSC_VER ) && (_MSC_VER < 1927 )   /* Check if compiler pre-dated Visual Studio 2019 Release 16.8 */
+#define ARCHIVE_RESTRICT
+#else
+#define ARCHIVE_RESTRICT restrict
+#endif
+
 struct creation_set;
 /*
  * The internal state for the "bsdtar" program.
@@ -188,7 +194,7 @@ int edit_pathname(struct bsdtar *, struc
 void   edit_mtime(struct bsdtar *, struct archive_entry *);
 int    need_report(void);
 int    pathcmp(const char *a, const char *b);
-void   safe_fprintf(FILE * restrict, const char * restrict fmt, ...) __LA_PRINTF(2, 3);
+void   safe_fprintf(FILE * ARCHIVE_RESTRICT, const char * ARCHIVE_RESTRICT fmt, ...) __LA_PRINTF(2, 3);
 void   set_chdir(struct bsdtar *, const char *newdir);
 const char *tar_i64toa(int64_t);
 void   tar_mode_c(struct bsdtar *bsdtar);

Index: pkgsrc/archivers/libarchive/files/tar/bsdtar_windows.c
diff -u pkgsrc/archivers/libarchive/files/tar/bsdtar_windows.c:1.4 pkgsrc/archivers/libarchive/files/tar/bsdtar_windows.c:1.5
--- pkgsrc/archivers/libarchive/files/tar/bsdtar_windows.c:1.4  Sat Oct 19 05:40:00 2024
+++ pkgsrc/archivers/libarchive/files/tar/bsdtar_windows.c      Sun Nov  2 08:52:15 2025
@@ -24,7 +24,7 @@
 #include <sddl.h>
 
 #include "bsdtar.h"
-#include "err.h"
+#include "lafe_err.h"
 
 /* This may actually not be needed anymore.
  * TODO: Review the error handling for chdir() failures and

Index: pkgsrc/archivers/libarchive/files/tar/bsdtar_windows.h
diff -u pkgsrc/archivers/libarchive/files/tar/bsdtar_windows.h:1.6 pkgsrc/archivers/libarchive/files/tar/bsdtar_windows.h:1.7
--- pkgsrc/archivers/libarchive/files/tar/bsdtar_windows.h:1.6  Wed May 21 15:25:52 2025
+++ pkgsrc/archivers/libarchive/files/tar/bsdtar_windows.h      Sun Nov  2 08:52:15 2025
@@ -11,6 +11,7 @@
 #include <windows.h>
 #include <io.h>
 #include <fcntl.h>
+#include <share.h>
 
 #ifndef PRId64
 #define        PRId64 "I64"

Index: pkgsrc/archivers/libarchive/files/tar/cmdline.c
diff -u pkgsrc/archivers/libarchive/files/tar/cmdline.c:1.12 pkgsrc/archivers/libarchive/files/tar/cmdline.c:1.13
--- pkgsrc/archivers/libarchive/files/tar/cmdline.c:1.12        Wed May 21 15:25:52 2025
+++ pkgsrc/archivers/libarchive/files/tar/cmdline.c     Sun Nov  2 08:52:15 2025
@@ -22,7 +22,7 @@
 #endif
 
 #include "bsdtar.h"
-#include "err.h"
+#include "lafe_err.h"
 
 /*
  * Short options for tar.  Please keep this sorted.

Index: pkgsrc/archivers/libarchive/files/tar/creation_set.c
diff -u pkgsrc/archivers/libarchive/files/tar/creation_set.c:1.7 pkgsrc/archivers/libarchive/files/tar/creation_set.c:1.8
--- pkgsrc/archivers/libarchive/files/tar/creation_set.c:1.7    Sat Oct 19 05:40:00 2024
+++ pkgsrc/archivers/libarchive/files/tar/creation_set.c        Sun Nov  2 08:52:15 2025
@@ -15,7 +15,7 @@
 #endif
 
 #include "bsdtar.h"
-#include "err.h"
+#include "lafe_err.h"
 
 struct creation_set {
        char             *create_format;

Index: pkgsrc/archivers/libarchive/files/tar/read.c
diff -u pkgsrc/archivers/libarchive/files/tar/read.c:1.9 pkgsrc/archivers/libarchive/files/tar/read.c:1.10
--- pkgsrc/archivers/libarchive/files/tar/read.c:1.9    Sat Oct 19 05:40:00 2024
+++ pkgsrc/archivers/libarchive/files/tar/read.c        Sun Nov  2 08:52:15 2025
@@ -57,7 +57,7 @@
 #endif
 
 #include "bsdtar.h"
-#include "err.h"
+#include "lafe_err.h"
 
 struct progress_data {
        struct bsdtar *bsdtar;

Index: pkgsrc/archivers/libarchive/files/tar/subst.c
diff -u pkgsrc/archivers/libarchive/files/tar/subst.c:1.10 pkgsrc/archivers/libarchive/files/tar/subst.c:1.11
--- pkgsrc/archivers/libarchive/files/tar/subst.c:1.10  Mon Apr 28 10:31:35 2025
+++ pkgsrc/archivers/libarchive/files/tar/subst.c       Sun Nov  2 08:52:15 2025
@@ -25,7 +25,7 @@
 #define        REG_BASIC 0
 #endif
 
-#include "err.h"
+#include "lafe_err.h"
 
 struct subst_rule {
        struct subst_rule *next;

Index: pkgsrc/archivers/libarchive/files/tar/util.c
diff -u pkgsrc/archivers/libarchive/files/tar/util.c:1.13 pkgsrc/archivers/libarchive/files/tar/util.c:1.14
--- pkgsrc/archivers/libarchive/files/tar/util.c:1.13   Wed May 21 15:25:52 2025
+++ pkgsrc/archivers/libarchive/files/tar/util.c        Sun Nov  2 08:52:15 2025
@@ -41,7 +41,7 @@
 #endif
 
 #include "bsdtar.h"
-#include "err.h"
+#include "lafe_err.h"
 #include "passphrase.h"
 
 static size_t  bsdtar_expand_char(char *, size_t, size_t, char);
@@ -682,6 +682,7 @@ list_item_verbose(struct bsdtar *bsdtar,
 {
        char                     tmp[100];
        size_t                   w;
+       size_t                   sw;
        const char              *p;
        const char              *fmt;
        time_t                   tim;
@@ -769,8 +770,8 @@ list_item_verbose(struct bsdtar *bsdtar,
        ltime = localtime(&tim);
 #endif
        if (ltime)
-               strftime(tmp, sizeof(tmp), fmt, ltime);
-       else
+               sw = strftime(tmp, sizeof(tmp), fmt, ltime);
+       if (!ltime || !sw)
                sprintf(tmp, "-- -- ----");
        fprintf(out, " %s ", tmp);
        safe_fprintf(out, "%s", archive_entry_pathname(entry));

Index: pkgsrc/archivers/libarchive/files/tar/write.c
diff -u pkgsrc/archivers/libarchive/files/tar/write.c:1.16 pkgsrc/archivers/libarchive/files/tar/write.c:1.17
--- pkgsrc/archivers/libarchive/files/tar/write.c:1.16  Wed May 21 15:25:52 2025
+++ pkgsrc/archivers/libarchive/files/tar/write.c       Sun Nov  2 08:52:15 2025
@@ -58,7 +58,7 @@
 #endif
 
 #include "bsdtar.h"
-#include "err.h"
+#include "lafe_err.h"
 #include "line_reader.h"
 
 #ifndef O_BINARY
@@ -111,7 +111,32 @@ seek_file(int fd, int64_t offset, int wh
        return (SetFilePointerEx((HANDLE)_get_osfhandle(fd),
                distance, NULL, FILE_BEGIN) ? 1 : -1);
 }
-#define        open _open
+
+static int
+_open_wrap_sopen(char const *const path, int const oflag, ...)
+{
+       va_list ap;
+       int r, pmode;
+
+       pmode = 0;
+       if (oflag & _O_CREAT)
+       {
+               va_start(ap, oflag);
+               pmode = va_arg(ap, int);
+               va_end(ap);
+       }
+
+       _sopen_s(&r, path, oflag, _SH_DENYNO, pmode & 0600);
+       if (r < 0)
+       {
+               /* _sopen_s populates errno */
+               return -1;
+       }
+
+       return r;
+}
+
+#define        open _open_wrap_sopen
 #define        close _close
 #define        read _read
 #ifdef lseek

Index: pkgsrc/archivers/libarchive/files/tar/test/CMakeLists.txt
diff -u pkgsrc/archivers/libarchive/files/tar/test/CMakeLists.txt:1.13 pkgsrc/archivers/libarchive/files/tar/test/CMakeLists.txt:1.14
--- pkgsrc/archivers/libarchive/files/tar/test/CMakeLists.txt:1.13      Wed May 21 15:25:52 2025
+++ pkgsrc/archivers/libarchive/files/tar/test/CMakeLists.txt   Sun Nov  2 08:52:16 2025
@@ -14,6 +14,7 @@ IF(ENABLE_TAR AND ENABLE_TEST)
     test_0.c
     test_basic.c
     test_copy.c
+    test_crlf_mtree.c
     test_empty_mtree.c
     test_extract_tar_Z.c
     test_extract_tar_bz2.c

Index: pkgsrc/archivers/libarchive/files/tar/test/list.h
diff -u pkgsrc/archivers/libarchive/files/tar/test/list.h:1.12 pkgsrc/archivers/libarchive/files/tar/test/list.h:1.13
--- pkgsrc/archivers/libarchive/files/tar/test/list.h:1.12      Wed May 21 15:25:52 2025
+++ pkgsrc/archivers/libarchive/files/tar/test/list.h   Sun Nov  2 08:52:16 2025
@@ -1,6 +1,7 @@
 DEFINE_TEST(test_0)
 DEFINE_TEST(test_basic)
 DEFINE_TEST(test_copy)
+DEFINE_TEST(test_crlf_mtree)
 DEFINE_TEST(test_empty_mtree)
 DEFINE_TEST(test_extract_tar_Z)
 DEFINE_TEST(test_extract_tar_bz2)

Index: pkgsrc/archivers/libarchive/files/test_utils/test_common.h
diff -u pkgsrc/archivers/libarchive/files/test_utils/test_common.h:1.12 pkgsrc/archivers/libarchive/files/test_utils/test_common.h:1.13
--- pkgsrc/archivers/libarchive/files/test_utils/test_common.h:1.12     Wed May 21 15:25:52 2025
+++ pkgsrc/archivers/libarchive/files/test_utils/test_common.h  Sun Nov  2 08:52:16 2025
@@ -340,8 +340,14 @@ int canGrzip(void);
 /* Return true if this platform can run the "gzip" program. */
 int canGzip(void);
 
-/* Return true if this platform can run the specified command. */
-int canRunCommand(const char *);
+/* Return true if this platform can run the specified command.
+ *
+ * Result can be optionally cached with `*tested`:
+ *   - 0 if not tested yet
+ *   - <0 if already tested negative
+ *   - >0 if already tested positive
+ */
+int canRunCommand(const char *cmd, int *tested);
 
 /* Return true if this platform can run the "lrzip" program. */
 int canLrzip(void);

Index: pkgsrc/archivers/libarchive/files/test_utils/test_main.c
diff -u pkgsrc/archivers/libarchive/files/test_utils/test_main.c:1.11 pkgsrc/archivers/libarchive/files/test_utils/test_main.c:1.12
--- pkgsrc/archivers/libarchive/files/test_utils/test_main.c:1.11       Tue Jul  1 15:14:45 2025
+++ pkgsrc/archivers/libarchive/files/test_utils/test_main.c    Sun Nov  2 08:52:16 2025
@@ -2523,167 +2523,77 @@ static const char *redirectArgs = ">NUL 
 #else
 static const char *redirectArgs = ">/dev/null 2>/dev/null"; /* POSIX 'sh' */
 #endif
+
 /*
- * Can this platform run the bzip2 program?
+ * Can this platform run the specified command?
  */
 int
-canBzip2(void)
+canRunCommand(const char *cmd, int *tested)
 {
-       static int tested = 0, value = 0;
-       if (!tested) {
-               tested = 1;
-               if (systemf("bzip2 --help %s", redirectArgs) == 0)
-                       value = 1;
-       }
-       return (value);
+  int value = tested ? *tested : 0;
+  if (!value) {
+    value = systemf("%s %s", cmd, redirectArgs) ? -1 : +1;
+    if (tested)
+      *tested = value;
+  }
+  return (value > 0);
 }
 
+#define CAN_RUN_FUNC(Program, Command) \
+    int can##Program(void) { \
+            static int tested = 0; \
+            return canRunCommand((Command), &tested); \
+    }
+
+/*
+ * Can this platform run the bzip2 program?
+ */
+CAN_RUN_FUNC(Bzip2, "bzip2 --help")
+
 /*
  * Can this platform run the grzip program?
  */
-int
-canGrzip(void)
-{
-       static int tested = 0, value = 0;
-       if (!tested) {
-               tested = 1;
-               if (systemf("grzip -V %s", redirectArgs) == 0)
-                       value = 1;
-       }
-       return (value);
-}
+CAN_RUN_FUNC(Grzip, "grzip -V")
 
 /*
  * Can this platform run the gzip program?
  */
-int
-canGzip(void)
-{
-       static int tested = 0, value = 0;
-       if (!tested) {
-               tested = 1;
-               if (systemf("gzip --help %s", redirectArgs) == 0)
-                       value = 1;
-       }
-       return (value);
-}
+CAN_RUN_FUNC(Gzip, "gzip --help")
 
 /*
  * Can this platform run the lrzip program?
  */
-int
-canRunCommand(const char *cmd)
-{
-  static int tested = 0, value = 0;
-  if (!tested) {
-    tested = 1;
-    if (systemf("%s %s", cmd, redirectArgs) == 0)
-      value = 1;
-  }
-  return (value);
-}
-
-int
-canLrzip(void)
-{
-       static int tested = 0, value = 0;
-       if (!tested) {
-               tested = 1;
-               if (systemf("lrzip -V %s", redirectArgs) == 0)
-                       value = 1;
-       }
-       return (value);
-}
+CAN_RUN_FUNC(Lrzip, "lrzip -V")
 
 /*
  * Can this platform run the lz4 program?
  */
-int
-canLz4(void)
-{
-       static int tested = 0, value = 0;
-       if (!tested) {
-               tested = 1;
-               if (systemf("lz4 --help %s", redirectArgs) == 0)
-                       value = 1;
-       }
-       return (value);
-}
+CAN_RUN_FUNC(Lz4, "lz4 --help")
 
 /*
  * Can this platform run the zstd program?
  */
-int
-canZstd(void)
-{
-       static int tested = 0, value = 0;
-       if (!tested) {
-               tested = 1;
-               if (systemf("zstd --help %s", redirectArgs) == 0)
-                       value = 1;
-       }
-       return (value);
-}
+CAN_RUN_FUNC(Zstd, "zstd --help")
 
 /*
  * Can this platform run the lzip program?
  */
-int
-canLzip(void)
-{
-       static int tested = 0, value = 0;
-       if (!tested) {
-               tested = 1;
-               if (systemf("lzip --help %s", redirectArgs) == 0)
-                       value = 1;
-       }
-       return (value);
-}
+CAN_RUN_FUNC(Lzip, "lzip --help")
 
 /*
  * Can this platform run the lzma program?
  */
-int
-canLzma(void)
-{
-       static int tested = 0, value = 0;
-       if (!tested) {
-               tested = 1;
-               if (systemf("lzma --help %s", redirectArgs) == 0)
-                       value = 1;
-       }
-       return (value);
-}
+CAN_RUN_FUNC(Lzma, "lzma --help")
 
 /*
  * Can this platform run the lzop program?
  */
-int
-canLzop(void)
-{
-       static int tested = 0, value = 0;
-       if (!tested) {
-               tested = 1;
-               if (systemf("lzop --help %s", redirectArgs) == 0)
-                       value = 1;
-       }
-       return (value);
-}
+CAN_RUN_FUNC(Lzop, "lzop --help")
 
 /*
  * Can this platform run the xz program?
  */
-int
-canXz(void)
-{
-       static int tested = 0, value = 0;
-       if (!tested) {
-               tested = 1;
-               if (systemf("xz --help %s", redirectArgs) == 0)
-                       value = 1;
-       }
-       return (value);
-}
+CAN_RUN_FUNC(Xz, "xz --help")
 
 /*
  * Can this filesystem handle nodump flags.
@@ -3581,7 +3491,7 @@ set_environment(const char *key, const c
  * Enforce C locale for (sub)processes.
  */
 static void
-set_c_locale()
+set_c_locale(void)
 {
        static const char *lcs[] = {
                "LC_ADDRESS",
@@ -4184,6 +4094,9 @@ main(int argc, char **argv)
        if (testprogfile == NULL)
        {
                tmp2_len = strlen(testprogdir) + 1 + strlen(PROGRAM) + 1;
+#if defined(_WIN32) && !defined(__CYGWIN__)
+               tmp2_len += 4;
+#endif
                if ((tmp2 = malloc(tmp2_len)) == NULL)
                {
                        fprintf(stderr, "ERROR: Out of memory.");
@@ -4192,6 +4105,9 @@ main(int argc, char **argv)
                strncpy(tmp2, testprogdir, tmp2_len);
                strncat(tmp2, "/", tmp2_len);
                strncat(tmp2, PROGRAM, tmp2_len);
+#if defined(_WIN32) && !defined(__CYGWIN__)
+               strncat(tmp2, ".exe", tmp2_len);
+#endif
                testprogfile = tmp2;
        }
 

Index: pkgsrc/archivers/libarchive/files/unzip/bsdunzip.c
diff -u pkgsrc/archivers/libarchive/files/unzip/bsdunzip.c:1.8 pkgsrc/archivers/libarchive/files/unzip/bsdunzip.c:1.9
--- pkgsrc/archivers/libarchive/files/unzip/bsdunzip.c:1.8      Wed May 21 15:25:52 2025
+++ pkgsrc/archivers/libarchive/files/unzip/bsdunzip.c  Sun Nov  2 08:52:16 2025
@@ -29,6 +29,9 @@
 #ifdef HAVE_LOCALE_H
 #include <locale.h>
 #endif
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
 #ifdef HAVE_STDARG_H
 #include <stdarg.h>
 #endif
@@ -54,7 +57,7 @@
 
 #include "bsdunzip.h"
 #include "passphrase.h"
-#include "err.h"
+#include "lafe_err.h"
 
 /* command-line options */
 static int              a_opt;         /* convert EOL */
@@ -1187,6 +1190,16 @@ main(int argc, char *argv[])
        const char *zipfile;
        int nopts;
 
+#if defined(HAVE_SIGACTION) && defined(SIGCHLD)
+       { /* Do not ignore SIGCHLD. */
+               struct sigaction sa;
+               sa.sa_handler = SIG_DFL;
+               sigemptyset(&sa.sa_mask);
+               sa.sa_flags = 0;
+               sigaction(SIGCHLD, &sa, NULL);
+       }
+#endif
+
        lafe_setprogname(*argv, "bsdunzip");
 
 #if HAVE_SETLOCALE



Home | Main Index | Thread Index | Old Index