Module Name: src
Committed By: christos
Date: Thu Oct 17 16:42:09 UTC 2024
Modified Files:
src/external/bsd/libarchive/dist/cat/test: test_0.c
src/external/bsd/libarchive/dist/cpio/test: test_basic.c
test_format_newc.c
src/external/bsd/libarchive/dist/libarchive: archive.h
archive_openssl_evp_private.h archive_openssl_hmac_private.h
archive_private.h archive_read.c
archive_read_disk_entry_from_file.c archive_read_disk_posix.c
archive_read_open_filename.c archive_read_support_format_iso9660.c
archive_read_support_format_mtree.c
archive_read_support_format_xar.c archive_util.c
archive_write_disk_posix.c archive_write_set_format_ar.c
archive_write_set_format_shar.c archive_write_set_format_ustar.c
src/external/bsd/libarchive/dist/libarchive/test:
test_read_format_7zip.c test_read_format_zip_nested.c
test_read_truncated_filter.c test_sparse_basic.c
src/external/bsd/libarchive/dist/tar: bsdtar.c write.c
src/external/bsd/libarchive/dist/tar/test: test_basic.c test_copy.c
test_option_C_upper.c test_option_U_upper.c test_option_s.c
test_symlink_dir.c
src/external/bsd/libarchive/dist/test_utils: test_common.h test_main.c
src/external/bsd/libarchive/include: config_netbsd.h
Log Message:
merge conflicts (4 tests still fail)
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/external/bsd/libarchive/dist/cat/test/test_0.c
cvs rdiff -u -r1.3 -r1.4 \
src/external/bsd/libarchive/dist/cpio/test/test_basic.c
cvs rdiff -u -r1.4 -r1.5 \
src/external/bsd/libarchive/dist/cpio/test/test_format_newc.c
cvs rdiff -u -r1.6 -r1.7 \
src/external/bsd/libarchive/dist/libarchive/archive.h
cvs rdiff -u -r1.4 -r1.5 \
src/external/bsd/libarchive/dist/libarchive/archive_openssl_evp_private.h \
src/external/bsd/libarchive/dist/libarchive/archive_read_disk_posix.c
cvs rdiff -u -r1.5 -r1.6 \
src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h \
src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c
\
src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c \
src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c
\
src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c
cvs rdiff -u -r1.3 -r1.4 \
src/external/bsd/libarchive/dist/libarchive/archive_private.h \
src/external/bsd/libarchive/dist/libarchive/archive_read.c \
src/external/bsd/libarchive/dist/libarchive/archive_read_open_filename.c \
src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_mtree.c
\
src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_xar.c \
src/external/bsd/libarchive/dist/libarchive/archive_util.c
cvs rdiff -u -r1.7 -r1.8 \
src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c
\
src/external/bsd/libarchive/dist/libarchive/archive_write_disk_posix.c
cvs rdiff -u -r1.3 -r1.4 \
src/external/bsd/libarchive/dist/libarchive/test/test_read_format_7zip.c \
src/external/bsd/libarchive/dist/libarchive/test/test_read_format_zip_nested.c \
src/external/bsd/libarchive/dist/libarchive/test/test_read_truncated_filter.c
cvs rdiff -u -r1.4 -r1.5 \
src/external/bsd/libarchive/dist/libarchive/test/test_sparse_basic.c
cvs rdiff -u -r1.3 -r1.4 src/external/bsd/libarchive/dist/tar/bsdtar.c
cvs rdiff -u -r1.4 -r1.5 src/external/bsd/libarchive/dist/tar/write.c
cvs rdiff -u -r1.3 -r1.4 \
src/external/bsd/libarchive/dist/tar/test/test_basic.c \
src/external/bsd/libarchive/dist/tar/test/test_option_C_upper.c \
src/external/bsd/libarchive/dist/tar/test/test_option_U_upper.c \
src/external/bsd/libarchive/dist/tar/test/test_option_s.c \
src/external/bsd/libarchive/dist/tar/test/test_symlink_dir.c
cvs rdiff -u -r1.4 -r1.5 \
src/external/bsd/libarchive/dist/tar/test/test_copy.c
cvs rdiff -u -r1.3 -r1.4 \
src/external/bsd/libarchive/dist/test_utils/test_common.h \
src/external/bsd/libarchive/dist/test_utils/test_main.c
cvs rdiff -u -r1.13 -r1.14 \
src/external/bsd/libarchive/include/config_netbsd.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/bsd/libarchive/dist/cat/test/test_0.c
diff -u src/external/bsd/libarchive/dist/cat/test/test_0.c:1.2 src/external/bsd/libarchive/dist/cat/test/test_0.c:1.3
--- src/external/bsd/libarchive/dist/cat/test/test_0.c:1.2 Tue Jan 21 13:33:47 2020
+++ src/external/bsd/libarchive/dist/cat/test/test_0.c Thu Oct 17 12:42:07 2024
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
Index: src/external/bsd/libarchive/dist/cpio/test/test_basic.c
diff -u src/external/bsd/libarchive/dist/cpio/test/test_basic.c:1.3 src/external/bsd/libarchive/dist/cpio/test/test_basic.c:1.4
--- src/external/bsd/libarchive/dist/cpio/test/test_basic.c:1.3 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/cpio/test/test_basic.c Thu Oct 17 12:42:07 2024
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
Index: src/external/bsd/libarchive/dist/cpio/test/test_format_newc.c
diff -u src/external/bsd/libarchive/dist/cpio/test/test_format_newc.c:1.4 src/external/bsd/libarchive/dist/cpio/test/test_format_newc.c:1.5
--- src/external/bsd/libarchive/dist/cpio/test/test_format_newc.c:1.4 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/cpio/test/test_format_newc.c Thu Oct 17 12:42:07 2024
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -194,11 +176,11 @@ DEFINE_TEST(test_format_newc)
assertEqualMem(e + 0, "070701", 6); /* Magic */
ino = from_hex(e + 6, 8); /* ino */
#if defined(_WIN32) && !defined(__CYGWIN__)
- /* Group members bits and others bits do not work. */
+ /* Group members bits and others bits do not work. */
assertEqualInt(0x8180, from_hex(e + 14, 8) & 0xffc0); /* Mode */
#else
assertEqualInt(0x81a4, from_hex(e + 14, 8)); /* Mode */
-#endif
+#endif
#if defined(_WIN32)
uid = from_hex(e + 22, 8);
#else
@@ -308,7 +290,7 @@ DEFINE_TEST(test_format_newc)
failure("If these aren't the same, then the hardlink detection failed to match them.");
assertEqualInt(ino, from_hex(e + 6, 8)); /* ino */
#if defined(_WIN32) && !defined(__CYGWIN__)
- /* Group members bits and others bits do not work. */
+ /* Group members bits and others bits do not work. */
assertEqualInt(0x8180, from_hex(e + 14, 8) & 0xffc0); /* Mode */
#else
assertEqualInt(0x81a4, from_hex(e + 14, 8)); /* Mode */
Index: src/external/bsd/libarchive/dist/libarchive/archive.h
diff -u src/external/bsd/libarchive/dist/libarchive/archive.h:1.6 src/external/bsd/libarchive/dist/libarchive/archive.h:1.7
--- src/external/bsd/libarchive/dist/libarchive/archive.h:1.6 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive.h Thu Oct 17 12:42:07 2024
@@ -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 3007004
+#define ARCHIVE_VERSION_NUMBER 3007007
#include <sys/stat.h>
#include <stddef.h> /* for wchar_t */
@@ -155,7 +155,7 @@ __LA_DECL int archive_version_number(vo
/*
* Textual name/version of the library, useful for version displays.
*/
-#define ARCHIVE_VERSION_ONLY_STRING "3.7.4"
+#define ARCHIVE_VERSION_ONLY_STRING "3.7.7"
#define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
__LA_DECL const char * archive_version_string(void);
Index: src/external/bsd/libarchive/dist/libarchive/archive_openssl_evp_private.h
diff -u src/external/bsd/libarchive/dist/libarchive/archive_openssl_evp_private.h:1.4 src/external/bsd/libarchive/dist/libarchive/archive_openssl_evp_private.h:1.5
--- src/external/bsd/libarchive/dist/libarchive/archive_openssl_evp_private.h:1.4 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_openssl_evp_private.h Thu Oct 17 12:42:08 2024
@@ -39,7 +39,7 @@
#include <string.h> /* memset */
static inline EVP_MD_CTX *EVP_MD_CTX_new(void)
{
- EVP_MD_CTX *ctx = (EVP_MD_CTX *)calloc(1, sizeof(EVP_MD_CTX));
+ EVP_MD_CTX *ctx = calloc(1, sizeof(EVP_MD_CTX));
return ctx;
}
Index: src/external/bsd/libarchive/dist/libarchive/archive_read_disk_posix.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_read_disk_posix.c:1.4 src/external/bsd/libarchive/dist/libarchive/archive_read_disk_posix.c:1.5
--- src/external/bsd/libarchive/dist/libarchive/archive_read_disk_posix.c:1.4 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_read_disk_posix.c Thu Oct 17 12:42:08 2024
@@ -451,7 +451,7 @@ archive_read_disk_new(void)
{
struct archive_read_disk *a;
- a = (struct archive_read_disk *)calloc(1, sizeof(*a));
+ a = calloc(1, sizeof(*a));
if (a == NULL)
return (NULL);
a->archive.magic = ARCHIVE_READ_DISK_MAGIC;
Index: src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h
diff -u src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h:1.5 src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h:1.6
--- src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h:1.5 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h Thu Oct 17 12:42:08 2024
@@ -39,7 +39,7 @@
#include <string.h> /* memset */
static inline HMAC_CTX *HMAC_CTX_new(void)
{
- HMAC_CTX *ctx = (HMAC_CTX *)calloc(1, sizeof(HMAC_CTX));
+ HMAC_CTX *ctx = calloc(1, sizeof(HMAC_CTX));
return ctx;
}
Index: src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c:1.5 src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c:1.6
--- src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c:1.5 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c Thu Oct 17 12:42:08 2024
@@ -273,7 +273,7 @@ struct file_info {
char re; /* Having RRIP "RE" extension. */
char re_descendant;
uint64_t cl_offset; /* Having RRIP "CL" extension. */
- int birthtime_is_set;
+ int time_is_set; /* Bitmask indicating which times are known */
time_t birthtime; /* File created time. */
time_t mtime; /* File last modified time. */
time_t atime; /* File last accessed time. */
@@ -306,6 +306,11 @@ struct file_info {
} rede_files;
};
+#define BIRTHTIME_IS_SET 1
+#define MTIME_IS_SET 2
+#define ATIME_IS_SET 4
+#define CTIME_IS_SET 8
+
struct heap_queue {
struct file_info **files;
int allocated;
@@ -394,7 +399,9 @@ static void dump_isodirrec(FILE *, const
#endif
static time_t time_from_tm(struct tm *);
static time_t isodate17(const unsigned char *);
+static int isodate17_valid(const unsigned char *);
static time_t isodate7(const unsigned char *);
+static int isodate7_valid(const unsigned char *);
static int isBootRecord(struct iso9660 *, const unsigned char *);
static int isVolumePartition(struct iso9660 *, const unsigned char *);
static int isVDSetTerminator(struct iso9660 *, const unsigned char *);
@@ -402,6 +409,9 @@ static int isJolietSVD(struct iso9660 *,
static int isSVD(struct iso9660 *, const unsigned char *);
static int isEVD(struct iso9660 *, const unsigned char *);
static int isPVD(struct iso9660 *, const unsigned char *);
+static int isRootDirectoryRecord(const unsigned char *);
+static int isValid723Integer(const unsigned char *);
+static int isValid733Integer(const unsigned char *);
static int next_cache_entry(struct archive_read *, struct iso9660 *,
struct file_info **);
static int next_entry_seek(struct archive_read *, struct iso9660 *,
@@ -453,7 +463,7 @@ archive_read_support_format_iso9660(stru
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_iso9660");
- iso9660 = (struct iso9660 *)calloc(1, sizeof(*iso9660));
+ iso9660 = calloc(1, sizeof(*iso9660));
if (iso9660 == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate iso9660 data");
@@ -773,8 +783,9 @@ isSVD(struct iso9660 *iso9660, const uns
/* Read Root Directory Record in Volume Descriptor. */
p = h + SVD_root_directory_record_offset;
- if (p[DR_length_offset] != 34)
+ if (!isRootDirectoryRecord(p)) {
return (0);
+ }
return (48);
}
@@ -851,8 +862,9 @@ isEVD(struct iso9660 *iso9660, const uns
/* Read Root Directory Record in Volume Descriptor. */
p = h + PVD_root_directory_record_offset;
- if (p[DR_length_offset] != 34)
+ if (!isRootDirectoryRecord(p)) {
return (0);
+ }
return (48);
}
@@ -882,21 +894,43 @@ isPVD(struct iso9660 *iso9660, const uns
if (!isNull(iso9660, h, PVD_reserved2_offset, PVD_reserved2_size))
return (0);
+ /* Volume space size must be encoded according to 7.3.3 */
+ if (!isValid733Integer(h + PVD_volume_space_size_offset)) {
+ return (0);
+ }
+ volume_block = archive_le32dec(h + PVD_volume_space_size_offset);
+ if (volume_block <= SYSTEM_AREA_BLOCK+4)
+ return (0);
+
/* Reserved field must be 0. */
if (!isNull(iso9660, h, PVD_reserved3_offset, PVD_reserved3_size))
return (0);
+ /* Volume set size must be encoded according to 7.2.3 */
+ if (!isValid723Integer(h + PVD_volume_set_size_offset)) {
+ return (0);
+ }
+
+ /* Volume sequence number must be encoded according to 7.2.3 */
+ if (!isValid723Integer(h + PVD_volume_sequence_number_offset)) {
+ return (0);
+ }
+
/* Logical block size must be > 0. */
/* I've looked at Ecma 119 and can't find any stronger
* restriction on this field. */
+ if (!isValid723Integer(h + PVD_logical_block_size_offset)) {
+ return (0);
+ }
logical_block_size =
archive_le16dec(h + PVD_logical_block_size_offset);
if (logical_block_size <= 0)
return (0);
- volume_block = archive_le32dec(h + PVD_volume_space_size_offset);
- if (volume_block <= SYSTEM_AREA_BLOCK+4)
+ /* Path Table size must be encoded according to 7.3.3 */
+ if (!isValid733Integer(h + PVD_path_table_size_offset)) {
return (0);
+ }
/* File structure version must be 1 for ISO9660/ECMA119. */
if (h[PVD_file_structure_version_offset] != 1)
@@ -935,8 +969,9 @@ isPVD(struct iso9660 *iso9660, const uns
/* Read Root Directory Record in Volume Descriptor. */
p = h + PVD_root_directory_record_offset;
- if (p[DR_length_offset] != 34)
+ if (!isRootDirectoryRecord(p)) {
return (0);
+ }
if (!iso9660->primary.location) {
iso9660->logical_block_size = logical_block_size;
@@ -952,6 +987,51 @@ isPVD(struct iso9660 *iso9660, const uns
}
static int
+isRootDirectoryRecord(const unsigned char *p) {
+ int flags;
+
+ /* ECMA119/ISO9660 requires that the root directory record be _exactly_ 34 bytes.
+ * However, we've seen images that have root directory records up to 68 bytes. */
+ if (p[DR_length_offset] < 34 || p[DR_length_offset] > 68) {
+ return (0);
+ }
+
+ /* The root directory location must be a 7.3.3 32-bit integer. */
+ if (!isValid733Integer(p + DR_extent_offset)) {
+ return (0);
+ }
+
+ /* The root directory size must be a 7.3.3 integer. */
+ if (!isValid733Integer(p + DR_size_offset)) {
+ return (0);
+ }
+
+ /* According to the standard, certain bits must be one or zero:
+ * Bit 1: must be 1 (this is a directory)
+ * Bit 2: must be 0 (not an associated file)
+ * Bit 3: must be 0 (doesn't use extended attribute record)
+ * Bit 7: must be 0 (final directory record for this file)
+ */
+ flags = p[DR_flags_offset];
+ if ((flags & 0x8E) != 0x02) {
+ return (0);
+ }
+
+ /* Volume sequence number must be a 7.2.3 integer. */
+ if (!isValid723Integer(p + DR_volume_sequence_number_offset)) {
+ return (0);
+ }
+
+ /* Root directory name is a single zero byte... */
+ if (p[DR_name_len_offset] != 1 || p[DR_name_offset] != 0) {
+ return (0);
+ }
+
+ /* Nothing looked wrong, so let's accept it. */
+ return (1);
+}
+
+static int
read_children(struct archive_read *a, struct file_info *parent)
{
struct iso9660 *iso9660;
@@ -1212,7 +1292,7 @@ archive_read_format_iso9660_read_header(
}
}
if (iso9660->utf16be_previous_path == NULL) {
- iso9660->utf16be_previous_path = malloc(UTF16_NAME_MAX);
+ iso9660->utf16be_previous_path = calloc(1, UTF16_NAME_MAX);
if (iso9660->utf16be_previous_path == NULL) {
archive_set_error(&a->archive, ENOMEM,
"No memory");
@@ -1278,13 +1358,22 @@ archive_read_format_iso9660_read_header(
archive_entry_set_uid(entry, file->uid);
archive_entry_set_gid(entry, file->gid);
archive_entry_set_nlink(entry, file->nlinks);
- if (file->birthtime_is_set)
+ if ((file->time_is_set & BIRTHTIME_IS_SET))
archive_entry_set_birthtime(entry, file->birthtime, 0);
else
archive_entry_unset_birthtime(entry);
- archive_entry_set_mtime(entry, file->mtime, 0);
- archive_entry_set_ctime(entry, file->ctime, 0);
- archive_entry_set_atime(entry, file->atime, 0);
+ if ((file->time_is_set & MTIME_IS_SET))
+ archive_entry_set_mtime(entry, file->mtime, 0);
+ else
+ archive_entry_unset_mtime(entry);
+ if ((file->time_is_set & CTIME_IS_SET))
+ archive_entry_set_ctime(entry, file->ctime, 0);
+ else
+ archive_entry_unset_ctime(entry);
+ if ((file->time_is_set & ATIME_IS_SET))
+ archive_entry_set_atime(entry, file->atime, 0);
+ else
+ archive_entry_unset_atime(entry);
/* N.B.: Rock Ridge supports 64-bit device numbers. */
archive_entry_set_rdev(entry, (dev_t)file->rdev);
archive_entry_set_size(entry, iso9660->entry_bytes_remaining);
@@ -1816,7 +1905,7 @@ parse_file_info(struct archive_read *a,
}
/* Create a new file entry and copy data from the ISO dir record. */
- file = (struct file_info *)calloc(1, sizeof(*file));
+ file = calloc(1, sizeof(*file));
if (file == NULL) {
archive_set_error(&a->archive, ENOMEM,
"No memory for file entry");
@@ -1825,8 +1914,11 @@ parse_file_info(struct archive_read *a,
file->parent = parent;
file->offset = offset;
file->size = fsize;
- file->mtime = isodate7(isodirrec + DR_date_offset);
- file->ctime = file->atime = file->mtime;
+ if (isodate7_valid(isodirrec + DR_date_offset)) {
+ file->time_is_set |= MTIME_IS_SET | ATIME_IS_SET | CTIME_IS_SET;
+ file->mtime = isodate7(isodirrec + DR_date_offset);
+ file->ctime = file->atime = file->mtime;
+ }
file->rede_files.first = NULL;
file->rede_files.last = &(file->rede_files.first);
@@ -2500,51 +2592,73 @@ parse_rockridge_TF1(struct file_info *fi
/* Use 17-byte time format. */
if ((flag & 1) && data_length >= 17) {
/* Create time. */
- file->birthtime_is_set = 1;
- file->birthtime = isodate17(data);
+ if (isodate17_valid(data)) {
+ file->time_is_set |= BIRTHTIME_IS_SET;
+ file->birthtime = isodate17(data);
+ }
data += 17;
data_length -= 17;
}
if ((flag & 2) && data_length >= 17) {
/* Modify time. */
- file->mtime = isodate17(data);
+ if (isodate17_valid(data)) {
+ file->time_is_set |= MTIME_IS_SET;
+ file->mtime = isodate17(data);
+ }
data += 17;
data_length -= 17;
}
if ((flag & 4) && data_length >= 17) {
/* Access time. */
- file->atime = isodate17(data);
+ if (isodate17_valid(data)) {
+ file->time_is_set |= ATIME_IS_SET;
+ file->atime = isodate17(data);
+ }
data += 17;
data_length -= 17;
}
if ((flag & 8) && data_length >= 17) {
/* Attribute change time. */
- file->ctime = isodate17(data);
+ if (isodate17_valid(data)) {
+ file->time_is_set |= CTIME_IS_SET;
+ file->ctime = isodate17(data);
+ }
}
} else {
/* Use 7-byte time format. */
if ((flag & 1) && data_length >= 7) {
/* Create time. */
- file->birthtime_is_set = 1;
- file->birthtime = isodate7(data);
+ if (isodate7_valid(data)) {
+ file->time_is_set |= BIRTHTIME_IS_SET;
+ file->birthtime = isodate7(data);
+ }
data += 7;
data_length -= 7;
}
if ((flag & 2) && data_length >= 7) {
/* Modify time. */
- file->mtime = isodate7(data);
+ if (isodate7_valid(data)) {
+ file->time_is_set |= MTIME_IS_SET;
+ file->mtime = isodate7(data);
+ }
data += 7;
data_length -= 7;
}
if ((flag & 4) && data_length >= 7) {
/* Access time. */
- file->atime = isodate7(data);
+ if (isodate7_valid(data)) {
+ file->time_is_set |= ATIME_IS_SET;
+ file->atime = isodate7(data);
+ }
data += 7;
data_length -= 7;
}
if ((flag & 8) && data_length >= 7) {
/* Attribute change time. */
- file->ctime = isodate7(data);
+ if (isodate7_valid(data)) {
+ file->time_is_set |= CTIME_IS_SET;
+ file->ctime = isodate7(data);
+ }
}
}
}
@@ -3033,7 +3147,7 @@ heap_add_entry(struct archive_read *a, s
return (ARCHIVE_FATAL);
}
new_pending_files = (struct file_info **)
- malloc(new_size * sizeof(new_pending_files[0]));
+ calloc(new_size, sizeof(new_pending_files[0]));
if (new_pending_files == NULL) {
archive_set_error(&a->archive,
ENOMEM, "Out of memory");
@@ -3127,6 +3241,82 @@ toi(const void *p, int n)
return (0);
}
+/*
+ * ECMA119/ISO9660 stores multi-byte integers in one of
+ * three different formats:
+ * * Little-endian (specified in section 7.2.1 and 7.3.1)
+ * * Big-endian (specified in section 7.2.2 and 7.3.2)
+ * * Both (specified in section 7.2.3 and 7.3.3)
+ *
+ * For values that follow section 7.2.3 (16-bit) or 7.3.3 (32-bit), we
+ * can check that the little-endian and big-endian forms agree with
+ * each other. This helps us avoid trying to decode files that are
+ * not really ISO images.
+ */
+static int
+isValid723Integer(const unsigned char *p) {
+ return (p[0] == p[3] && p[1] == p[2]);
+}
+
+static int
+isValid733Integer(const unsigned char *p)
+{
+ return (p[0] == p[7]
+ && p[1] == p[6]
+ && p[2] == p[5]
+ && p[3] == p[4]);
+}
+
+static int
+isodate7_valid(const unsigned char *v)
+{
+ int year = v[0];
+ int month = v[1];
+ int day = v[2];
+ int hour = v[3];
+ int minute = v[4];
+ int second = v[5];
+ int gmt_off = (signed char)v[6];
+
+ /* ECMA-119 9.1.5 "If all seven values are zero, it shall mean
+ * that the date is unspecified" */
+ if (year == 0
+ && month == 0
+ && day == 0
+ && hour == 0
+ && minute == 0
+ && second == 0
+ && gmt_off == 0)
+ return 0;
+ /*
+ * Sanity-test each individual field
+ */
+ /* Year can have any value */
+ /* Month must be 1-12 */
+ if (month < 1 || month > 12)
+ return 0;
+ /* Day must be 1-31 */
+ if (day < 1 || day > 31)
+ return 0;
+ /* Hour must be 0-23 */
+ if (hour > 23)
+ return 0;
+ /* Minute must be 0-59 */
+ if (minute > 59)
+ return 0;
+ /* second must be 0-59 according to ECMA-119 9.1.5 */
+ /* BUT: we should probably allow for the time being in UTC, which
+ allows up to 61 seconds in a minute in certain cases */
+ if (second > 61)
+ return 0;
+ /* Offset from GMT must be -48 to +52 */
+ if (gmt_off < -48 || gmt_off > +52)
+ return 0;
+
+ /* All tests pass, this is OK */
+ return 1;
+}
+
static time_t
isodate7(const unsigned char *v)
{
@@ -3153,6 +3343,67 @@ isodate7(const unsigned char *v)
return (t);
}
+static int
+isodate17_valid(const unsigned char *v)
+{
+ /* First 16 bytes are all ASCII digits */
+ for (int i = 0; i < 16; i++) {
+ if (v[i] < '0' || v[i] > '9')
+ return 0;
+ }
+
+ int year = (v[0] - '0') * 1000 + (v[1] - '0') * 100
+ + (v[2] - '0') * 10 + (v[3] - '0');
+ int month = (v[4] - '0') * 10 + (v[5] - '0');
+ int day = (v[6] - '0') * 10 + (v[7] - '0');
+ int hour = (v[8] - '0') * 10 + (v[9] - '0');
+ int minute = (v[10] - '0') * 10 + (v[11] - '0');
+ int second = (v[12] - '0') * 10 + (v[13] - '0');
+ int hundredths = (v[14] - '0') * 10 + (v[15] - '0');
+ int gmt_off = (signed char)v[16];
+
+ if (year == 0 && month == 0 && day == 0
+ && hour == 0 && minute == 0 && second == 0
+ && hundredths == 0 && gmt_off == 0)
+ return 0;
+ /*
+ * Sanity-test each individual field
+ */
+
+ /* Year must be 1900-2300 */
+ /* (Not specified in ECMA-119, but these seem
+ like reasonable limits. */
+ if (year < 1900 || year > 2300)
+ return 0;
+ /* Month must be 1-12 */
+ if (month < 1 || month > 12)
+ return 0;
+ /* Day must be 1-31 */
+ if (day < 1 || day > 31)
+ return 0;
+ /* Hour must be 0-23 */
+ if (hour > 23)
+ return 0;
+ /* Minute must be 0-59 */
+ if (minute > 59)
+ return 0;
+ /* second must be 0-59 according to ECMA-119 9.1.5 */
+ /* BUT: we should probably allow for the time being in UTC, which
+ allows up to 61 seconds in a minute in certain cases */
+ if (second > 61)
+ return 0;
+ /* Hundredths must be 0-99 */
+ if (hundredths > 99)
+ return 0;
+ /* Offset from GMT must be -48 to +52 */
+ if (gmt_off < -48 || gmt_off > +52)
+ return 0;
+
+ /* All tests pass, this is OK */
+ return 1;
+
+}
+
static time_t
isodate17(const unsigned char *v)
{
@@ -3164,7 +3415,7 @@ isodate17(const unsigned char *v)
tm.tm_year = (v[0] - '0') * 1000 + (v[1] - '0') * 100
+ (v[2] - '0') * 10 + (v[3] - '0')
- 1900;
- tm.tm_mon = (v[4] - '0') * 10 + (v[5] - '0');
+ tm.tm_mon = (v[4] - '0') * 10 + (v[5] - '0') - 1;
tm.tm_mday = (v[6] - '0') * 10 + (v[7] - '0');
tm.tm_hour = (v[8] - '0') * 10 + (v[9] - '0');
tm.tm_min = (v[10] - '0') * 10 + (v[11] - '0');
Index: src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c:1.5 src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c:1.6
--- src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c:1.5 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c Thu Oct 17 12:42:08 2024
@@ -126,7 +126,7 @@ archive_write_set_format_ar(struct archi
if (a->format_free != NULL)
(a->format_free)(a);
- ar = (struct ar_w *)calloc(1, sizeof(*ar));
+ ar = calloc(1, sizeof(*ar));
if (ar == NULL) {
archive_set_error(&a->archive, ENOMEM, "Can't allocate ar data");
return (ARCHIVE_FATAL);
@@ -246,7 +246,7 @@ archive_write_ar_header(struct archive_w
return (ARCHIVE_WARN);
}
- se = (char *)malloc(strlen(filename) + 3);
+ se = malloc(strlen(filename) + 3);
if (se == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate filename buffer");
@@ -379,7 +379,7 @@ archive_write_ar_data(struct archive_wri
return (ARCHIVE_WARN);
}
- ar->strtab = (char *)malloc(s + 1);
+ ar->strtab = malloc(s + 1);
if (ar->strtab == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate strtab buffer");
Index: src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c:1.5 src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c:1.6
--- src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c:1.5 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c Thu Oct 17 12:42:08 2024
@@ -113,7 +113,7 @@ archive_write_set_format_shar(struct arc
if (a->format_free != NULL)
(a->format_free)(a);
- shar = (struct shar *)calloc(1, sizeof(*shar));
+ shar = calloc(1, sizeof(*shar));
if (shar == NULL) {
archive_set_error(&a->archive, ENOMEM, "Can't allocate shar data");
return (ARCHIVE_FATAL);
@@ -209,6 +209,10 @@ archive_write_shar_header(struct archive
if (archive_entry_filetype(entry) != AE_IFDIR) {
/* Try to create the dir. */
p = strdup(name);
+ if (p == NULL) {
+ archive_set_error(&a->archive, ENOMEM, "Out of memory");
+ return (ARCHIVE_FATAL);
+ }
pp = strrchr(p, '/');
/* If there is a / character, try to create the dir. */
if (pp != NULL) {
@@ -291,6 +295,10 @@ archive_write_shar_header(struct archive
free(shar->last_dir);
shar->last_dir = strdup(name);
+ if (shar->last_dir == NULL) {
+ archive_set_error(&a->archive, ENOMEM, "Out of memory");
+ return (ARCHIVE_FATAL);
+ }
/* Trim a trailing '/'. */
pp = strrchr(shar->last_dir, '/');
if (pp != NULL && pp[1] == '\0')
Index: src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c:1.5 src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c:1.6
--- src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c:1.5 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c Thu Oct 17 12:42:08 2024
@@ -183,7 +183,7 @@ archive_write_set_format_ustar(struct ar
return (ARCHIVE_FATAL);
}
- ustar = (struct ustar *)calloc(1, sizeof(*ustar));
+ ustar = calloc(1, sizeof(*ustar));
if (ustar == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate ustar data");
@@ -254,7 +254,11 @@ archive_write_ustar_header(struct archiv
sconv = ustar->opt_sconv;
/* Sanity check. */
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ if (archive_entry_pathname_w(entry) == NULL) {
+#else
if (archive_entry_pathname(entry) == NULL) {
+#endif
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Can't record entry in tar file without pathname");
return (ARCHIVE_FAILED);
@@ -263,7 +267,7 @@ archive_write_ustar_header(struct archiv
/* Only regular files (not hardlinks) have data. */
if (archive_entry_hardlink(entry) != NULL ||
archive_entry_symlink(entry) != NULL ||
- !(archive_entry_filetype(entry) == AE_IFREG))
+ archive_entry_filetype(entry) != AE_IFREG)
archive_entry_set_size(entry, 0);
if (AE_IFDIR == archive_entry_filetype(entry)) {
Index: src/external/bsd/libarchive/dist/libarchive/archive_private.h
diff -u src/external/bsd/libarchive/dist/libarchive/archive_private.h:1.3 src/external/bsd/libarchive/dist/libarchive/archive_private.h:1.4
--- src/external/bsd/libarchive/dist/libarchive/archive_private.h:1.3 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_private.h Thu Oct 17 12:42:08 2024
@@ -27,8 +27,10 @@
#define ARCHIVE_PRIVATE_H_INCLUDED
#ifndef __LIBARCHIVE_BUILD
+#ifndef __LIBARCHIVE_TEST
#error This header is only to be used internally to libarchive.
#endif
+#endif
#if HAVE_ICONV_H
#include <iconv.h>
@@ -158,9 +160,9 @@ __LA_NORETURN void __archive_errx(int re
void __archive_ensure_cloexec_flag(int fd);
int __archive_mktemp(const char *tmpdir);
#if defined(_WIN32) && !defined(__CYGWIN__)
-int __archive_mkstemp(wchar_t *template);
+int __archive_mkstemp(wchar_t *templates);
#else
-int __archive_mkstemp(char *template);
+int __archive_mkstemp(char *templates);
#endif
int __archive_clean(struct archive *);
Index: src/external/bsd/libarchive/dist/libarchive/archive_read.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_read.c:1.3 src/external/bsd/libarchive/dist/libarchive/archive_read.c:1.4
--- src/external/bsd/libarchive/dist/libarchive/archive_read.c:1.3 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_read.c Thu Oct 17 12:42:08 2024
@@ -92,7 +92,7 @@ archive_read_new(void)
{
struct archive_read *a;
- a = (struct archive_read *)calloc(1, sizeof(*a));
+ a = calloc(1, sizeof(*a));
if (a == NULL)
return (NULL);
a->archive.magic = ARCHIVE_READ_MAGIC;
@@ -582,7 +582,7 @@ choose_filters(struct archive_read *a)
}
filter
- = (struct archive_read_filter *)calloc(1, sizeof(*filter));
+ = calloc(1, sizeof(*filter));
if (filter == NULL)
return (ARCHIVE_FATAL);
filter->bidder = best_bidder;
@@ -1382,7 +1382,7 @@ __archive_read_filter_ahead(struct archi
if (filter->client_avail <= 0) {
if (filter->end_of_file) {
if (avail != NULL)
- *avail = 0;
+ *avail = filter->avail;
return (NULL);
}
bytes_read = (filter->vtable->read)(filter,
@@ -1451,7 +1451,7 @@ __archive_read_filter_ahead(struct archi
s = t;
}
/* Now s >= min, so allocate a new buffer. */
- p = (char *)malloc(s);
+ p = malloc(s);
if (p == NULL) {
archive_set_error(
&filter->archive->archive,
Index: src/external/bsd/libarchive/dist/libarchive/archive_read_open_filename.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_read_open_filename.c:1.3 src/external/bsd/libarchive/dist/libarchive/archive_read_open_filename.c:1.4
--- src/external/bsd/libarchive/dist/libarchive/archive_read_open_filename.c:1.3 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_read_open_filename.c Thu Oct 17 12:42:08 2024
@@ -122,7 +122,7 @@ archive_read_open_filenames(struct archi
{
if (filename == NULL)
filename = "";
- mine = (struct read_file_data *)calloc(1,
+ mine = calloc(1,
sizeof(*mine) + strlen(filename));
if (mine == NULL)
goto no_memory;
@@ -175,7 +175,7 @@ archive_read_open_filenames_w(struct arc
{
if (wfilename == NULL)
wfilename = L"";
- mine = (struct read_file_data *)calloc(1,
+ mine = calloc(1,
sizeof(*mine) + wcslen(wfilename) * sizeof(wchar_t));
if (mine == NULL)
goto no_memory;
Index: src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_mtree.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_mtree.c:1.3 src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_mtree.c:1.4
--- src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_mtree.c:1.3 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_mtree.c Thu Oct 17 12:42:08 2024
@@ -273,7 +273,7 @@ archive_read_support_format_mtree(struct
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_mtree");
- mtree = (struct mtree *)calloc(1, sizeof(*mtree));
+ mtree = calloc(1, sizeof(*mtree));
if (mtree == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate mtree data");
Index: src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_xar.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_xar.c:1.3 src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_xar.c:1.4
--- src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_xar.c:1.3 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_xar.c Thu Oct 17 12:42:08 2024
@@ -416,7 +416,7 @@ static void unknowntag_end(struct xar *,
static int xml_start(struct archive_read *,
const char *, struct xmlattr_list *);
static void xml_end(void *, const char *);
-static void xml_data(void *, const char *, int);
+static void xml_data(void *, const char *, size_t);
static int xml_parse_file_flags(struct xar *, const char *);
static int xml_parse_file_ext2(struct xar *, const char *);
#if defined(HAVE_LIBXML_XMLREADER_H)
@@ -450,7 +450,7 @@ archive_read_support_format_xar(struct a
archive_check_magic(_a, ARCHIVE_READ_MAGIC,
ARCHIVE_STATE_NEW, "archive_read_support_format_xar");
- xar = (struct xar *)calloc(1, sizeof(*xar));
+ xar = calloc(1, sizeof(*xar));
if (xar == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate xar data");
@@ -1242,7 +1242,7 @@ heap_add_entry(struct archive_read *a,
return (ARCHIVE_FATAL);
}
new_pending_files = (struct xar_file **)
- malloc(new_size * sizeof(new_pending_files[0]));
+ calloc(new_size, sizeof(new_pending_files[0]));
if (new_pending_files == NULL) {
archive_set_error(&a->archive,
ENOMEM, "Out of memory");
@@ -1616,9 +1616,9 @@ decompress(struct archive_read *a, const
switch (xar->rd_encoding) {
case GZIP:
xar->stream.next_in = (Bytef *)(uintptr_t)b;
- xar->stream.avail_in = avail_in;
+ xar->stream.avail_in = (uInt)avail_in;
xar->stream.next_out = (unsigned char *)outbuff;
- xar->stream.avail_out = avail_out;
+ xar->stream.avail_out = (uInt)avail_out;
r = inflate(&(xar->stream), 0);
switch (r) {
case Z_OK: /* Decompressor made some progress.*/
@@ -1635,9 +1635,9 @@ decompress(struct archive_read *a, const
#if defined(HAVE_BZLIB_H) && defined(BZ_CONFIG_ERROR)
case BZIP2:
xar->bzstream.next_in = (char *)(uintptr_t)b;
- xar->bzstream.avail_in = avail_in;
+ xar->bzstream.avail_in = (unsigned int)avail_in;
xar->bzstream.next_out = (char *)outbuff;
- xar->bzstream.avail_out = avail_out;
+ xar->bzstream.avail_out = (unsigned int)avail_out;
r = BZ2_bzDecompress(&(xar->bzstream));
switch (r) {
case BZ_STREAM_END: /* Found end of stream. */
@@ -2055,9 +2055,10 @@ xml_start(struct archive_read *a, const
attr = attr->next) {
if (strcmp(attr->name, "link") != 0)
continue;
- if (xar->file->hdnext != NULL || xar->file->link != 0) {
+ if (xar->file->hdnext != NULL || xar->file->link != 0 ||
+ xar->file == xar->hdlink_orgs) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "File with multiple link targets");
+ "File with multiple link attributes");
return (ARCHIVE_FATAL);
}
if (strcmp(attr->value, "original") == 0) {
@@ -2673,7 +2674,7 @@ is_string(const char *known, const char
}
static void
-xml_data(void *userData, const char *s, int len)
+xml_data(void *userData, const char *s, size_t len)
{
struct archive_read *a;
struct xar *xar;
@@ -2706,6 +2707,9 @@ xml_data(void *userData, const char *s,
switch (xar->xmlsts) {
case FILE_NAME:
+ if (xar->file->has & HAS_PATHNAME)
+ break;
+
if (xar->file->parent != NULL) {
archive_string_concat(&(xar->file->pathname),
&(xar->file->parent->pathname));
@@ -3189,8 +3193,11 @@ xml2_read_toc(struct archive_read *a)
if (r == ARCHIVE_OK)
r = xml_start(a, name, &list);
xmlattr_cleanup(&list);
- if (r != ARCHIVE_OK)
+ if (r != ARCHIVE_OK) {
+ xmlFreeTextReader(reader);
+ xmlCleanupParser();
return (r);
+ }
if (empty)
xml_end(a, name);
break;
@@ -3256,6 +3263,9 @@ expat_start_cb(void *userData, const XML
struct xmlattr_list list;
int r;
+ if (ud->state != ARCHIVE_OK)
+ return;
+
r = expat_xmlattr_setup(a, &list, atts);
if (r == ARCHIVE_OK)
r = xml_start(a, (const char *)name, &list);
@@ -3276,7 +3286,7 @@ expat_data_cb(void *userData, const XML_
{
struct expat_userData *ud = (struct expat_userData *)userData;
- xml_data(ud->archive, s, len);
+ xml_data(ud->archive, s, (size_t)len);
}
static int
@@ -3312,14 +3322,16 @@ expat_read_toc(struct archive_read *a)
d = NULL;
r = rd_contents(a, &d, &outbytes, &used, xar->toc_remaining);
- if (r != ARCHIVE_OK)
+ if (r != ARCHIVE_OK) {
+ XML_ParserFree(parser);
return (r);
+ }
xar->toc_remaining -= used;
xar->offset += used;
xar->toc_total += outbytes;
PRINT_TOC(d, outbytes);
- xr = XML_Parse(parser, d, outbytes, xar->toc_remaining == 0);
+ xr = XML_Parse(parser, d, (int)outbytes, xar->toc_remaining == 0);
__archive_read_consume(a, used);
if (xr == XML_STATUS_ERROR) {
XML_ParserFree(parser);
Index: src/external/bsd/libarchive/dist/libarchive/archive_util.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_util.c:1.3 src/external/bsd/libarchive/dist/libarchive/archive_util.c:1.4
--- src/external/bsd/libarchive/dist/libarchive/archive_util.c:1.3 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_util.c Thu Oct 17 12:42:08 2024
@@ -280,7 +280,8 @@ __archive_mktempx(const char *tmpdir, wc
if (archive_wstring_append_from_mbs(&temp_name, tmpdir,
strlen(tmpdir)) < 0)
goto exit_tmpfile;
- if (temp_name.s[temp_name.length-1] != L'/')
+ if (temp_name.length == 0 ||
+ temp_name.s[temp_name.length-1] != L'/')
archive_wstrappend_wchar(&temp_name, L'/');
}
@@ -454,7 +455,7 @@ get_tempdir(struct archive_string *tempp
tmp = "/tmp";
#endif
archive_strcpy(temppath, tmp);
- if (temppath->s[temppath->length-1] != '/')
+ if (temppath->length == 0 || temppath->s[temppath->length-1] != '/')
archive_strappend_char(temppath, '/');
return (ARCHIVE_OK);
}
@@ -477,7 +478,8 @@ __archive_mktemp(const char *tmpdir)
goto exit_tmpfile;
} else {
archive_strcpy(&temp_name, tmpdir);
- if (temp_name.s[temp_name.length-1] != '/')
+ if (temp_name.length == 0 ||
+ temp_name.s[temp_name.length-1] != '/')
archive_strappend_char(&temp_name, '/');
}
#ifdef O_TMPFILE
@@ -538,7 +540,7 @@ __archive_mktempx(const char *tmpdir, ch
goto exit_tmpfile;
} else
archive_strcpy(&temp_name, tmpdir);
- if (temp_name.s[temp_name.length-1] == '/') {
+ if (temp_name.length > 0 && temp_name.s[temp_name.length-1] == '/') {
temp_name.s[temp_name.length-1] = '\0';
temp_name.length --;
}
@@ -649,8 +651,7 @@ archive_utility_string_sort_helper(char
if (strcmp(strings[i], pivot) < 0)
{
lesser_count++;
- tmp = (char **)realloc(lesser,
- lesser_count * sizeof(char *));
+ tmp = realloc(lesser, lesser_count * sizeof(*tmp));
if (!tmp) {
free(greater);
free(lesser);
@@ -662,8 +663,7 @@ archive_utility_string_sort_helper(char
else
{
greater_count++;
- tmp = (char **)realloc(greater,
- greater_count * sizeof(char *));
+ tmp = realloc(greater, greater_count * sizeof(*tmp));
if (!tmp) {
free(greater);
free(lesser);
Index: src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c:1.7 src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c:1.8
--- src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c:1.7 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c Thu Oct 17 12:42:08 2024
@@ -520,6 +520,7 @@ setup_xattr(struct archive_read_disk *a,
if (size == -1) {
archive_set_error(&a->archive, errno,
"Couldn't read extended attribute");
+ free(value);
return (ARCHIVE_WARN);
}
Index: src/external/bsd/libarchive/dist/libarchive/archive_write_disk_posix.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_write_disk_posix.c:1.7 src/external/bsd/libarchive/dist/libarchive/archive_write_disk_posix.c:1.8
--- src/external/bsd/libarchive/dist/libarchive/archive_write_disk_posix.c:1.7 Sun Jun 9 15:47:55 2024
+++ src/external/bsd/libarchive/dist/libarchive/archive_write_disk_posix.c Thu Oct 17 12:42:08 2024
@@ -2031,7 +2031,7 @@ archive_write_disk_new(void)
{
struct archive_write_disk *a;
- a = (struct archive_write_disk *)calloc(1, sizeof(*a));
+ a = calloc(1, sizeof(*a));
if (a == NULL)
return (NULL);
a->archive.magic = ARCHIVE_WRITE_DISK_MAGIC;
@@ -2811,7 +2811,7 @@ new_fixup(struct archive_write_disk *a,
{
struct fixup_entry *fe;
- fe = (struct fixup_entry *)calloc(1, sizeof(struct fixup_entry));
+ fe = calloc(1, sizeof(struct fixup_entry));
if (fe == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate memory for a fixup");
@@ -4260,7 +4260,7 @@ copy_xattrs(struct archive_write_disk *a
}
for (xattr_i = 0; xattr_i < xattr_size;
xattr_i += strlen(xattr_names + xattr_i) + 1) {
- char *xattr_val_saved;
+ char *p;
ssize_t s;
int f;
@@ -4271,15 +4271,14 @@ copy_xattrs(struct archive_write_disk *a
ret = ARCHIVE_WARN;
goto exit_xattr;
}
- xattr_val_saved = xattr_val;
- xattr_val = realloc(xattr_val, s);
- if (xattr_val == NULL) {
+ p = realloc(xattr_val, s);
+ if (p == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Failed to get metadata(xattr)");
ret = ARCHIVE_WARN;
- free(xattr_val_saved);
goto exit_xattr;
}
+ xattr_val = p;
s = fgetxattr(tmpfd, xattr_names + xattr_i, xattr_val, s, 0, 0);
if (s == -1) {
archive_set_error(&a->archive, errno,
@@ -4425,8 +4424,7 @@ set_mac_metadata(struct archive_write_di
* silly dance of writing the data to disk just so that
* copyfile() can read it back in again. */
archive_string_init(&tmp);
- archive_strcpy(&tmp, pathname);
- archive_strcat(&tmp, ".XXXXXX");
+ archive_strcpy(&tmp, "tar.mmd.XXXXXX");
fd = mkstemp(tmp.s);
if (fd < 0) {
Index: src/external/bsd/libarchive/dist/libarchive/test/test_read_format_7zip.c
diff -u src/external/bsd/libarchive/dist/libarchive/test/test_read_format_7zip.c:1.3 src/external/bsd/libarchive/dist/libarchive/test/test_read_format_7zip.c:1.4
--- src/external/bsd/libarchive/dist/libarchive/test/test_read_format_7zip.c:1.3 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/libarchive/test/test_read_format_7zip.c Thu Oct 17 12:42:08 2024
@@ -1050,6 +1050,7 @@ test_arm_filter(const char *refname)
extract_reference_file(refname);
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
@@ -1123,6 +1124,7 @@ test_arm64_filter(const char *refname)
extract_reference_file(refname);
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
@@ -1257,3 +1259,45 @@ DEFINE_TEST(test_read_format_7zip_win_at
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
+
+DEFINE_TEST(test_read_format_7zip_extract_second)
+{
+ struct archive *a;
+ char buffer[256];
+
+ assert((a = archive_read_new()) != NULL);
+
+ if (ARCHIVE_OK != archive_read_support_filter_lzma(a)) {
+ skipping(
+ "7zip:lzma decoding is not supported on this platform");
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ return;
+ }
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+
+ /*
+ * The test archive has two files: first.txt which is a 65,536 file (the
+ * size of the uncompressed buffer), and second.txt which has contents
+ * we will validate. This test ensures we can skip first.txt and still
+ * be able to read the contents of second.txt
+ */
+ const char *refname = "test_read_format_7zip_extract_second.7z";
+ extract_reference_file(refname);
+
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_open_filename(a, refname, 10240));
+
+ struct archive_entry *ae;
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("first.txt", archive_entry_pathname(ae));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualString("second.txt", archive_entry_pathname(ae));
+
+ assertEqualInt(23, archive_read_data(a, buffer, sizeof(buffer)));
+ assertEqualMem("This is from second.txt", buffer, 23);
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
Index: src/external/bsd/libarchive/dist/libarchive/test/test_read_format_zip_nested.c
diff -u src/external/bsd/libarchive/dist/libarchive/test/test_read_format_zip_nested.c:1.3 src/external/bsd/libarchive/dist/libarchive/test/test_read_format_zip_nested.c:1.4
--- src/external/bsd/libarchive/dist/libarchive/test/test_read_format_zip_nested.c:1.3 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/libarchive/test/test_read_format_zip_nested.c Thu Oct 17 12:42:08 2024
@@ -49,7 +49,7 @@ DEFINE_TEST(test_read_format_zip_nested)
/* Save contents of inner Zip. */
innerLength = (size_t)archive_entry_size(ae);
- inner = calloc(innerLength, sizeof(char));
+ inner = calloc(innerLength, sizeof(*inner));
assertEqualInt(innerLength, archive_read_data(a, inner, innerLength));
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
Index: src/external/bsd/libarchive/dist/libarchive/test/test_read_truncated_filter.c
diff -u src/external/bsd/libarchive/dist/libarchive/test/test_read_truncated_filter.c:1.3 src/external/bsd/libarchive/dist/libarchive/test/test_read_truncated_filter.c:1.4
--- src/external/bsd/libarchive/dist/libarchive/test/test_read_truncated_filter.c:1.3 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/libarchive/test/test_read_truncated_filter.c Thu Oct 17 12:42:08 2024
@@ -43,12 +43,12 @@ test_truncation(const char *compression,
int i, r, use_prog;
buffsize = 2000000;
- assert(NULL != (buff = (char *)malloc(buffsize)));
+ assert(NULL != (buff = malloc(buffsize)));
if (buff == NULL)
return;
datasize = 10000;
- assert(NULL != (data = (char *)malloc(datasize)));
+ assert(NULL != (data = malloc(datasize)));
if (data == NULL) {
free(buff);
return;
Index: src/external/bsd/libarchive/dist/libarchive/test/test_sparse_basic.c
diff -u src/external/bsd/libarchive/dist/libarchive/test/test_sparse_basic.c:1.4 src/external/bsd/libarchive/dist/libarchive/test/test_sparse_basic.c:1.5
--- src/external/bsd/libarchive/dist/libarchive/test/test_sparse_basic.c:1.4 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/libarchive/test/test_sparse_basic.c Thu Oct 17 12:42:08 2024
@@ -67,13 +67,16 @@ struct sparse {
static void create_sparse_file(const char *, const struct sparse *);
-#if defined(__APPLE__)
-/* On APFS holes need to be at least 4096x4097 bytes */
-#define MIN_HOLE 16781312
-#else
-/* Elsewhere we work with 4096*10 bytes */
-#define MIN_HOLE 409600
-#endif
+/* This should be large enough that any OS/filesystem that
+ * does support sparse files is certain to store a gap this big
+ * as a hole. */
+/* A few data points:
+ * = ZFS on FreeBSD needs this to be at least 200kB
+ * = macOS APFS needs this to be at least 4096x4097 bytes
+ *
+ * 32MiB here is bigger than either of the above.
+ */
+#define MIN_HOLE (32 * 1024UL * 1024UL)
#if defined(_WIN32) && !defined(__CYGWIN__)
#include <winioctl.h>
Index: src/external/bsd/libarchive/dist/tar/bsdtar.c
diff -u src/external/bsd/libarchive/dist/tar/bsdtar.c:1.3 src/external/bsd/libarchive/dist/tar/bsdtar.c:1.4
--- src/external/bsd/libarchive/dist/tar/bsdtar.c:1.3 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/tar/bsdtar.c Thu Oct 17 12:42:08 2024
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2008 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "bsdtar_platform.h"
@@ -43,6 +25,9 @@
#ifdef HAVE_LANGINFO_H
#include <langinfo.h>
#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
#ifdef HAVE_LOCALE_H
#include <locale.h>
#endif
Index: src/external/bsd/libarchive/dist/tar/write.c
diff -u src/external/bsd/libarchive/dist/tar/write.c:1.4 src/external/bsd/libarchive/dist/tar/write.c:1.5
--- src/external/bsd/libarchive/dist/tar/write.c:1.4 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/tar/write.c Thu Oct 17 12:42:08 2024
@@ -1,27 +1,9 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "bsdtar_platform.h"
@@ -32,7 +14,9 @@
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
-#ifdef HAVE_ATTR_XATTR_H
+#if HAVE_SYS_XATTR_H
+#include <sys/xattr.h>
+#elif HAVE_ATTR_XATTR_H
#include <attr/xattr.h>
#endif
#ifdef HAVE_ERRNO_H
@@ -944,7 +928,9 @@ write_hierarchy(struct bsdtar *bsdtar, s
while (entry != NULL) {
write_file(bsdtar, a, entry);
- archive_entry_free(entry);
+ if (entry != spare_entry) {
+ archive_entry_free(entry);
+ }
entry = spare_entry;
spare_entry = NULL;
}
Index: src/external/bsd/libarchive/dist/tar/test/test_basic.c
diff -u src/external/bsd/libarchive/dist/tar/test/test_basic.c:1.3 src/external/bsd/libarchive/dist/tar/test/test_basic.c:1.4
--- src/external/bsd/libarchive/dist/tar/test/test_basic.c:1.3 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/tar/test/test_basic.c Thu Oct 17 12:42:08 2024
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
Index: src/external/bsd/libarchive/dist/tar/test/test_option_C_upper.c
diff -u src/external/bsd/libarchive/dist/tar/test/test_option_C_upper.c:1.3 src/external/bsd/libarchive/dist/tar/test/test_option_C_upper.c:1.4
--- src/external/bsd/libarchive/dist/tar/test/test_option_C_upper.c:1.3 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/tar/test/test_option_C_upper.c Thu Oct 17 12:42:08 2024
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
Index: src/external/bsd/libarchive/dist/tar/test/test_option_U_upper.c
diff -u src/external/bsd/libarchive/dist/tar/test/test_option_U_upper.c:1.3 src/external/bsd/libarchive/dist/tar/test/test_option_U_upper.c:1.4
--- src/external/bsd/libarchive/dist/tar/test/test_option_U_upper.c:1.3 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/tar/test/test_option_U_upper.c Thu Oct 17 12:42:08 2024
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
Index: src/external/bsd/libarchive/dist/tar/test/test_option_s.c
diff -u src/external/bsd/libarchive/dist/tar/test/test_option_s.c:1.3 src/external/bsd/libarchive/dist/tar/test/test_option_s.c:1.4
--- src/external/bsd/libarchive/dist/tar/test/test_option_s.c:1.3 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/tar/test/test_option_s.c Thu Oct 17 12:42:08 2024
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2008 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
Index: src/external/bsd/libarchive/dist/tar/test/test_symlink_dir.c
diff -u src/external/bsd/libarchive/dist/tar/test/test_symlink_dir.c:1.3 src/external/bsd/libarchive/dist/tar/test/test_symlink_dir.c:1.4
--- src/external/bsd/libarchive/dist/tar/test/test_symlink_dir.c:1.3 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/tar/test/test_symlink_dir.c Thu Oct 17 12:42:08 2024
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
Index: src/external/bsd/libarchive/dist/tar/test/test_copy.c
diff -u src/external/bsd/libarchive/dist/tar/test/test_copy.c:1.4 src/external/bsd/libarchive/dist/tar/test/test_copy.c:1.5
--- src/external/bsd/libarchive/dist/tar/test/test_copy.c:1.4 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/tar/test/test_copy.c Thu Oct 17 12:42:08 2024
@@ -1,26 +1,8 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2003-2007 Tim Kientzle
* All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
@@ -190,7 +172,7 @@ create_tree(void)
#define LIMIT_USTAR 100
static void
-verify_tree(size_t limit)
+verify_tree(size_t limit, const char *format)
{
char name1[260];
char name2[260];
@@ -203,6 +185,7 @@ verify_tree(size_t limit)
/* Verify a file named "f/abcdef..." */
snprintf(name1, sizeof(name1), "f/%s", filenames[i]);
if (i <= limit) {
+ failure("Verifying %s", format);
assertFileExists(name1);
assertFileContents(name1, (int)strlen(name1), name1);
}
@@ -210,6 +193,7 @@ verify_tree(size_t limit)
snprintf(name2, sizeof(name2), "l/%s", filenames[i]);
if (i + 2 <= limit) {
/* Verify hardlink "l/abcdef..." */
+ failure("Verifying %s", format);
assertIsHardlink(name1, name2);
/* Verify hardlink "m/abcdef..." */
name2[0] = 'm';
@@ -220,13 +204,16 @@ verify_tree(size_t limit)
/* Verify symlink "s/abcdef..." */
snprintf(name1, sizeof(name1), "s/%s", filenames[i]);
snprintf(name2, sizeof(name2), "../f/%s", filenames[i]);
- if (strlen(name2) <= limit)
+ if (strlen(name2) <= limit) {
+ failure("Verifying %s", format);
assertIsSymlink(name1, name2, 0);
+ }
}
/* Verify dir "d/abcdef...". */
snprintf(name1, sizeof(name1), "d/%s", filenames[i]);
if (i + 1 <= limit) { /* +1 for trailing slash */
+ failure("Verifying %s", format);
if (assertIsDir(name1, -1)) {
/* TODO: opendir/readdir this
* directory and make sure
@@ -246,7 +233,7 @@ verify_tree(size_t limit)
char dir[2];
dir[0] = *dp; dir[1] = '\0';
d = opendir(dir);
- failure("Unable to open dir '%s'", dir);
+ failure("Unable to open dir '%s' for testing %s", dir, format);
if (!assert(d != NULL))
continue;
while ((de = readdir(d)) != NULL) {
@@ -278,25 +265,25 @@ verify_tree(size_t limit)
}
static void
-copy_basic(void)
+copy_basic(const char *extra_args, const char *name)
{
int r;
/* NOTE: for proper operation on cygwin-1.5 and windows, the
- * length of the name of the directory below, "plain", must be
+ * length of the name of the directory below must be
* less than or equal to the length of the name of the original
* directory, "original" This restriction derives from the
* extremely limited pathname lengths on those platforms.
*/
- assertMakeDir("plain", 0775);
- assertEqualInt(0, chdir("plain"));
+ assertMakeDir(name, 0775);
+ assertEqualInt(0, chdir(name));
/*
* Use the tar program to create an archive.
*/
- r = systemf("%s cf archive -C ../original f d l m s >pack.out 2>pack.err",
- testprog);
- failure("Error invoking \"%s cf\"", testprog);
+ r = systemf("%s cf archive %s -C ../original f d l m s >pack.out 2>pack.err",
+ testprog, extra_args);
+ failure("Error invoking \"%s cf archive %s\"", testprog, extra_args);
assertEqualInt(r, 0);
/* Verify that nothing went to stdout or stderr. */
@@ -314,20 +301,7 @@ copy_basic(void)
assertEmptyFile("unpack.err");
assertEmptyFile("unpack.out");
- verify_tree(LIMIT_NONE);
-
- /*
- * Unpack a second time to make sure that things are still ok
- */
- r = systemf("%s xf archive >unpack.out 2>unpack.err", testprog);
- failure("Error invoking %s xf archive", testprog);
- assertEqualInt(r, 0);
-
- /* Verify that nothing went to stdout or stderr. */
- assertEmptyFile("unpack.err");
- assertEmptyFile("unpack.out");
-
- verify_tree(LIMIT_NONE);
+ verify_tree(LIMIT_NONE, name);
assertEqualInt(0, chdir(".."));
}
@@ -370,8 +344,8 @@ copy_ustar(void)
assertEmptyFile("unpack.err");
assertEmptyFile("unpack.out");
- verify_tree(LIMIT_USTAR);
- assertEqualInt(0, chdir("../.."));
+ verify_tree(LIMIT_USTAR, "ustar");
+ assertEqualInt(0, chdir(".."));
}
DEFINE_TEST(test_copy)
@@ -380,8 +354,11 @@ DEFINE_TEST(test_copy)
create_tree(); /* Create sample files in "original" dir. */
/* Test simple "tar -c | tar -x" pipeline copy. */
- copy_basic();
+ copy_basic("", "default");
/* Same, but constrain to ustar format. */
copy_ustar();
+
+ /* Same, but with pax format. */
+ copy_basic(" --format pax", "pax");
}
Index: src/external/bsd/libarchive/dist/test_utils/test_common.h
diff -u src/external/bsd/libarchive/dist/test_utils/test_common.h:1.3 src/external/bsd/libarchive/dist/test_utils/test_common.h:1.4
--- src/external/bsd/libarchive/dist/test_utils/test_common.h:1.3 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/test_utils/test_common.h Thu Oct 17 12:42:08 2024
@@ -48,6 +48,9 @@
#endif
#include <sys/types.h> /* Windows requires this before sys/stat.h */
+#if !HAVE_SUSECONDS_T
+#define suseconds_t long
+#endif
#include <sys/stat.h>
#if HAVE_DIRENT_H
@@ -313,7 +316,7 @@ int assertion_non_empty_file(const char
int assertion_set_nodump(const char *, int, const char *);
int assertion_text_file_contents(const char *, int, const char *buff, const char *f);
int assertion_umask(const char *, int, int);
-int assertion_utimes(const char *, int, const char *, long, long, long, long );
+int assertion_utimes(const char *, int, const char *, time_t, suseconds_t, time_t, suseconds_t);
int assertion_version(const char*, int, const char *, const char *);
void skipping_setup(const char *, int);
Index: src/external/bsd/libarchive/dist/test_utils/test_main.c
diff -u src/external/bsd/libarchive/dist/test_utils/test_main.c:1.3 src/external/bsd/libarchive/dist/test_utils/test_main.c:1.4
--- src/external/bsd/libarchive/dist/test_utils/test_main.c:1.3 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/dist/test_utils/test_main.c Thu Oct 17 12:42:08 2024
@@ -85,6 +85,10 @@
#include <membership.h>
#endif
+#ifndef nitems
+#define nitems(arr) (sizeof(arr) / sizeof((arr)[0]))
+#endif
+
/*
*
* Windows support routines
@@ -121,6 +125,8 @@
#define access _access
#undef chdir
#define chdir _chdir
+#undef chmod
+#define chmod _chmod
#endif
#ifndef fileno
#define fileno _fileno
@@ -217,7 +223,8 @@ my_CreateSymbolicLinkA(const char *linkn
static BOOLEAN (WINAPI *f)(LPCSTR, LPCSTR, DWORD);
DWORD attrs;
static int set;
- int ret, tmpflags, llen, tlen;
+ int ret, tmpflags;
+ size_t llen, tlen;
int flags = 0;
char *src, *tgt, *p;
if (!set) {
@@ -233,10 +240,10 @@ my_CreateSymbolicLinkA(const char *linkn
if (tlen == 0 || llen == 0)
return (0);
- tgt = malloc((tlen + 1) * sizeof(char));
+ tgt = malloc(tlen + 1);
if (tgt == NULL)
return (0);
- src = malloc((llen + 1) * sizeof(char));
+ src = malloc(llen + 1);
if (src == NULL) {
free(tgt);
return (0);
@@ -1237,16 +1244,19 @@ assertion_file_contains_lines_any_order(
}
expected_count = i;
if (expected_count) {
- expected = malloc(sizeof(char *) * expected_count);
+ expected = calloc(expected_count, sizeof(*expected));
if (expected == NULL) {
failure_start(pathname, line, "Can't allocate memory");
failure_finish(NULL);
- free(expected);
- free(buff);
- return (0);
+ goto cleanup;
}
for (i = 0; lines[i] != NULL; ++i) {
expected[i] = strdup(lines[i]);
+ if (expected[i] == NULL) {
+ failure_start(pathname, line, "Can't allocate memory");
+ failure_finish(NULL);
+ goto cleanup;
+ }
}
}
@@ -1264,9 +1274,7 @@ assertion_file_contains_lines_any_order(
if (actual == NULL) {
failure_start(pathname, line, "Can't allocate memory");
failure_finish(NULL);
- free(expected);
- free(buff);
- return (0);
+ goto cleanup;
}
for (j = 0, p = buff; p < buff + buff_size;
p += 1 + strlen(p)) {
@@ -1279,8 +1287,6 @@ assertion_file_contains_lines_any_order(
/* Erase matching lines from both lists */
for (i = 0; i < expected_count; ++i) {
- if (expected[i] == NULL)
- continue;
for (j = 0; j < actual_count; ++j) {
if (actual[j] == NULL)
continue;
@@ -1303,9 +1309,9 @@ assertion_file_contains_lines_any_order(
++actual_failure;
}
if (expected_failure == 0 && actual_failure == 0) {
- free(buff);
- free(expected);
free(actual);
+ free(expected);
+ free(buff);
return (1);
}
failure_start(file, line, "File doesn't match: %s", pathname);
@@ -1313,6 +1319,7 @@ assertion_file_contains_lines_any_order(
if (expected[i] != NULL) {
logprintf(" Expected but not present: %s\n", expected[i]);
free(expected[i]);
+ expected[i] = NULL;
}
}
for (j = 0; j < actual_count; ++j) {
@@ -1320,9 +1327,15 @@ assertion_file_contains_lines_any_order(
logprintf(" Present but not expected: %s\n", actual[j]);
}
failure_finish(NULL);
- free(buff);
- free(expected);
+cleanup:
free(actual);
+ if (expected != NULL) {
+ for (i = 0; i < expected_count; ++i)
+ if (expected[i] != NULL)
+ free(expected[i]);
+ free(expected);
+ }
+ free(buff);
return (0);
}
@@ -1766,16 +1779,17 @@ is_symlink(const char *file, int line,
FILE_FLAG_OPEN_REPARSE_POINT;
/* Replace slashes with backslashes in pathname */
- pn = malloc((strlen(pathname) + 1) * sizeof(char));
- p = pathname;
- s = pn;
- while(*p != '\0') {
- if(*p == '/')
+ pn = malloc(strlen(pathname) + 1);
+ if (pn == NULL) {
+ failure_start(file, line, "Can't allocate memory");
+ failure_finish(NULL);
+ return (0);
+ }
+ for (p = pathname, s = pn; *p != '\0'; p++, s++) {
+ if (*p == '/')
*s = '\\';
else
*s = *p;
- p++;
- s++;
}
*s = '\0';
@@ -2083,8 +2097,8 @@ assertion_umask(const char *file, int li
/* Set times, report failures. */
int
-assertion_utimes(const char *file, int line,
- const char *pathname, long at, long at_nsec, long mt, long mt_nsec)
+assertion_utimes(const char *file, int line, const char *pathname,
+ time_t at, suseconds_t at_nsec, time_t mt, suseconds_t mt_nsec)
{
int r;
@@ -2950,7 +2964,6 @@ setTestAcl(const char *path)
acl_permset_t permset;
const uid_t uid = 1;
uuid_t uuid;
- int i;
const acl_perm_t acl_perms[] = {
ACL_READ_DATA,
ACL_WRITE_DATA,
@@ -2992,7 +3005,7 @@ setTestAcl(const char *path)
failure("acl_get_permset() error: %s", strerror(errno));
if (assertEqualInt(r, 0) == 0)
goto testacl_free;
- for (i = 0; i < (int)(sizeof(acl_perms) / sizeof(acl_perms[0])); i++) {
+ for (size_t i = 0; i < nitems(acl_perms); i++) {
r = acl_add_perm(permset, acl_perms[i]);
failure("acl_add_perm() error: %s", strerror(errno));
if (assertEqualInt(r, 0) == 0)
@@ -3642,7 +3655,7 @@ test_run(int i, const char *tmpdir)
static void
usage(const char *program)
{
- static const int limit = sizeof(tests) / sizeof(tests[0]);
+ static const int limit = nitems(tests);
int i;
printf("Usage: %s [options] <test> <test> ...\n", program);
@@ -3874,12 +3887,13 @@ get_test_set(int *test_set, int limit, c
int
main(int argc, char **argv)
{
- static const int limit = sizeof(tests) / sizeof(tests[0]);
- int test_set[sizeof(tests) / sizeof(tests[0])];
+ static const int limit = nitems(tests);
+ int test_set[nitems(tests)];
int i = 0, j = 0, tests_run = 0, tests_failed = 0, option;
- int testprogdir_len;
+ size_t testprogdir_len;
+ size_t tmplen;
#ifdef PROGRAM
- int tmp2_len;
+ size_t tmp2_len;
#endif
time_t now;
struct tm *tmptr;
@@ -3922,7 +3936,7 @@ main(int argc, char **argv)
*/
progname = p = argv[0];
testprogdir_len = strlen(progname) + 1;
- if ((testprogdir = (char *)malloc(testprogdir_len)) == NULL)
+ if ((testprogdir = malloc(testprogdir_len)) == NULL)
{
fprintf(stderr, "ERROR: Out of memory.");
exit(1);
@@ -3950,7 +3964,7 @@ main(int argc, char **argv)
#endif
{
/* Fixup path for relative directories. */
- if ((testprogdir = (char *)realloc(testprogdir,
+ if ((testprogdir = realloc(testprogdir,
strlen(pwd) + 1 + strlen(testprogdir) + 1)) == NULL)
{
fprintf(stderr, "ERROR: Out of memory.");
@@ -3977,6 +3991,9 @@ main(int argc, char **argv)
tmp = getenv("TEMPDIR");
else
tmp = "/tmp";
+ tmplen = strlen(tmp);
+ while (tmplen > 0 && tmp[tmplen - 1] == '/')
+ tmplen--;
/* Allow -d to be controlled through the environment. */
if (getenv(ENVBASE "_DEBUG") != NULL)
@@ -4070,7 +4087,7 @@ main(int argc, char **argv)
if (testprogfile == NULL)
{
tmp2_len = strlen(testprogdir) + 1 + strlen(PROGRAM) + 1;
- if ((tmp2 = (char *)malloc(tmp2_len)) == NULL)
+ if ((tmp2 = malloc(tmp2_len)) == NULL)
{
fprintf(stderr, "ERROR: Out of memory.");
exit(1);
@@ -4083,7 +4100,7 @@ main(int argc, char **argv)
{
char *testprg;
- int testprg_len;
+ size_t testprg_len;
#if defined(_WIN32) && !defined(__CYGWIN__)
/* Command.com sometimes rejects '/' separators. */
testprg = strdup(testprogfile);
@@ -4129,16 +4146,16 @@ main(int argc, char **argv)
#endif
strftime(tmpdir_timestamp, sizeof(tmpdir_timestamp),
"%Y-%m-%dT%H.%M.%S", tmptr);
- if ((strlen(tmp) + 1 + strlen(progname) + 1 +
- strlen(tmpdir_timestamp) + 1 + 3) >
- (sizeof(tmpdir) / sizeof(char))) {
+ if (tmplen + 1 + strlen(progname) + 1 +
+ strlen(tmpdir_timestamp) + 1 + 3 >=
+ nitems(tmpdir)) {
fprintf(stderr,
"ERROR: Temp directory pathname too long\n");
exit(1);
}
- snprintf(tmpdir, sizeof(tmpdir), "%s/%s.%s-%03d", tmp,
- progname, tmpdir_timestamp, i);
- if (assertMakeDir(tmpdir,0755))
+ snprintf(tmpdir, sizeof(tmpdir), "%.*s/%s.%s-%03d",
+ (int)tmplen, tmp, progname, tmpdir_timestamp, i);
+ if (assertMakeDir(tmpdir, 0755))
break;
if (i >= 999) {
fprintf(stderr,
Index: src/external/bsd/libarchive/include/config_netbsd.h
diff -u src/external/bsd/libarchive/include/config_netbsd.h:1.13 src/external/bsd/libarchive/include/config_netbsd.h:1.14
--- src/external/bsd/libarchive/include/config_netbsd.h:1.13 Sun Jun 9 15:47:56 2024
+++ src/external/bsd/libarchive/include/config_netbsd.h Thu Oct 17 12:42:09 2024
@@ -170,16 +170,16 @@
/* #undef ARCHIVE_XATTR_LINUX */
/* Version number of bsdcat */
-#define BSDCAT_VERSION_STRING "3.7.4"
+#define BSDCAT_VERSION_STRING "3.7.7"
/* Version number of bsdcpio */
-#define BSDCPIO_VERSION_STRING "3.7.4"
+#define BSDCPIO_VERSION_STRING "3.7.7"
/* Version number of bsdtar */
-#define BSDTAR_VERSION_STRING "3.7.4"
+#define BSDTAR_VERSION_STRING "3.7.7"
/* Version number of bsdunzip */
-#define BSDUNZIP_VERSION_STRING "3.7.4"
+#define BSDUNZIP_VERSION_STRING "3.7.7"
/* Define to 1 if the system has the type `ace_t'. */
/* #undef HAVE_ACE_T */
@@ -698,9 +698,6 @@
/* Define to 1 if you have the <libxml/xmlwriter.h> header file. */
/* #undef HAVE_LIBXML_XMLWRITER_H */
-/* Define to 1 if you have the `z' library (-lz). */
-#define HAVE_LIBZ 1
-
/* Define to 1 if you have the `zstd' library (-lzstd). */
/* #undef HAVE_LIBZSTD */
@@ -1122,9 +1119,6 @@
/* Define to 1 if you have the <sys/poll.h> header file. */
#define HAVE_SYS_POLL_H 1
-/* Define to 1 if you have the <sys/queue.h> header file. */
-#define HAVE_SYS_QUEUE_H 1
-
/* Define to 1 if you have the <sys/richacl.h> header file. */
/* #undef HAVE_SYS_RICHACL_H */
@@ -1257,7 +1251,7 @@
/* Define to 1 if you have a working FS_IOC_GETFLAGS */
/* #undef HAVE_WORKING_FS_IOC_GETFLAGS */
-/* Define to 1 if you have the <zlib.h> header file. */
+/* Define to 1 if you have zlib >= 1.2.1 */
#define HAVE_ZLIB_H 1
/* Define to 1 if you have the <zstd.h> header file. */
@@ -1280,10 +1274,10 @@
#define ICONV_CONST
/* Version number of libarchive as a single integer */
-#define LIBARCHIVE_VERSION_NUMBER "3007004"
+#define LIBARCHIVE_VERSION_NUMBER "3007007"
/* Version number of libarchive */
-#define LIBARCHIVE_VERSION_STRING "3.7.4"
+#define LIBARCHIVE_VERSION_STRING "3.7.7"
/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
slash. */
@@ -1313,7 +1307,7 @@
#define PACKAGE_NAME "libarchive"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "libarchive 3.7.4"
+#define PACKAGE_STRING "libarchive 3.7.7"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "libarchive"
@@ -1322,7 +1316,7 @@
#define PACKAGE_URL ""
/* Define to the version of this package. */
-#define PACKAGE_VERSION "3.7.4"
+#define PACKAGE_VERSION "3.7.7"
/* Define to 1 if PCRE2_STATIC needs to be defined. */
/* #undef PCRE2_STATIC */
@@ -1440,7 +1434,7 @@
/* Version number of package */
-#define VERSION "3.7.4"
+#define VERSION "3.7.7"
/* Define to '0x0502' for Windows Server 2003 APIs. */
/* #undef WINVER */