Module Name: src Committed By: joerg Date: Wed Jul 24 14:03:57 UTC 2019
Modified Files: src/external/bsd/libarchive/dist/libarchive: archive.h archive_openssl_hmac_private.h archive_pack_dev.c archive_pack_dev.h archive_read_disk_entry_from_file.c archive_read_support_format_iso9660.c archive_write.3 archive_write_set_format_ar.c archive_write_set_format_shar.c archive_write_set_format_ustar.c Log Message: Merge changes from libarchive 3.4.0. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 \ src/external/bsd/libarchive/dist/libarchive/archive.h \ 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.2 -r1.3 \ src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c \ src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h cvs rdiff -u -r1.5 -r1.6 \ src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c cvs rdiff -u -r1.6 -r1.7 \ src/external/bsd/libarchive/dist/libarchive/archive_write.3 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/libarchive/archive.h diff -u src/external/bsd/libarchive/dist/libarchive/archive.h:1.3 src/external/bsd/libarchive/dist/libarchive/archive.h:1.4 --- src/external/bsd/libarchive/dist/libarchive/archive.h:1.3 Thu Apr 20 13:01:40 2017 +++ src/external/bsd/libarchive/dist/libarchive/archive.h Wed Jul 24 14:03:57 2019 @@ -36,7 +36,7 @@ * assert that ARCHIVE_VERSION_NUMBER >= 2012108. */ /* Note: Compiler will complain if this does not match archive_entry.h! */ -#define ARCHIVE_VERSION_NUMBER 3003002 +#define ARCHIVE_VERSION_NUMBER 3004000 #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.3.2dev" +#define ARCHIVE_VERSION_ONLY_STRING "3.4.0" #define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING __LA_DECL const char * archive_version_string(void); @@ -177,6 +177,7 @@ __LA_DECL const char * archive_zlib_ver __LA_DECL const char * archive_liblzma_version(void); __LA_DECL const char * archive_bzlib_version(void); __LA_DECL const char * archive_liblz4_version(void); +__LA_DECL const char * archive_libzstd_version(void); /* Declare our basic types. */ struct archive; @@ -276,6 +277,7 @@ typedef const char *archive_passphrase_c #define ARCHIVE_FILTER_LZOP 11 #define ARCHIVE_FILTER_GRZIP 12 #define ARCHIVE_FILTER_LZ4 13 +#define ARCHIVE_FILTER_ZSTD 14 #if ARCHIVE_VERSION_NUMBER < 4000000 #define ARCHIVE_COMPRESSION_NONE ARCHIVE_FILTER_NONE @@ -338,6 +340,7 @@ typedef const char *archive_passphrase_c #define ARCHIVE_FORMAT_RAR 0xD0000 #define ARCHIVE_FORMAT_7ZIP 0xE0000 #define ARCHIVE_FORMAT_WARC 0xF0000 +#define ARCHIVE_FORMAT_RAR_V5 0x100000 /* * Codes returned by archive_read_format_capabilities(). @@ -433,6 +436,7 @@ __LA_DECL int archive_read_support_filte __LA_DECL int archive_read_support_filter_rpm(struct archive *); __LA_DECL int archive_read_support_filter_uu(struct archive *); __LA_DECL int archive_read_support_filter_xz(struct archive *); +__LA_DECL int archive_read_support_filter_zstd(struct archive *); __LA_DECL int archive_read_support_format_7zip(struct archive *); __LA_DECL int archive_read_support_format_all(struct archive *); @@ -446,6 +450,7 @@ __LA_DECL int archive_read_support_forma __LA_DECL int archive_read_support_format_lha(struct archive *); __LA_DECL int archive_read_support_format_mtree(struct archive *); __LA_DECL int archive_read_support_format_rar(struct archive *); +__LA_DECL int archive_read_support_format_rar5(struct archive *); __LA_DECL int archive_read_support_format_raw(struct archive *); __LA_DECL int archive_read_support_format_tar(struct archive *); __LA_DECL int archive_read_support_format_warc(struct archive *); @@ -778,6 +783,7 @@ __LA_DECL int archive_write_add_filter_p const char *cmd); __LA_DECL int archive_write_add_filter_uuencode(struct archive *); __LA_DECL int archive_write_add_filter_xz(struct archive *); +__LA_DECL int archive_write_add_filter_zstd(struct archive *); /* A convenience function to set the format based on the code or name. */ @@ -1089,6 +1095,8 @@ __LA_DECL int archive_match_excluded(str */ __LA_DECL int archive_match_path_excluded(struct archive *, struct archive_entry *); +/* Control recursive inclusion of directory content when directory is included. Default on. */ +__LA_DECL int archive_match_set_inclusion_recursion(struct archive *, int); /* Add exclusion pathname pattern. */ __LA_DECL int archive_match_exclude_pattern(struct archive *, const char *); __LA_DECL int archive_match_exclude_pattern_w(struct archive *, 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.3 src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h:1.4 --- src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h:1.3 Mon Feb 5 12:13:54 2018 +++ src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h Wed Jul 24 14:03:57 2019 @@ -28,7 +28,8 @@ #include <openssl/hmac.h> #include <openssl/opensslv.h> -#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) +#if OPENSSL_VERSION_NUMBER < 0x10100000L || \ + (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x20700000L) #include <stdlib.h> /* malloc, free */ #include <string.h> /* memset */ static inline HMAC_CTX *HMAC_CTX_new(void) 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.3 src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c:1.4 --- src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c:1.3 Thu Apr 20 13:01:40 2017 +++ src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c Wed Jul 24 14:03:57 2019 @@ -409,7 +409,8 @@ static int next_entry_seek(struct archiv struct file_info **); static struct file_info * parse_file_info(struct archive_read *a, - struct file_info *parent, const unsigned char *isodirrec); + struct file_info *parent, const unsigned char *isodirrec, + size_t reclen); static int parse_rockridge(struct archive_read *a, struct file_info *file, const unsigned char *start, const unsigned char *end); @@ -1022,7 +1023,7 @@ read_children(struct archive_read *a, st if (*(p + DR_name_len_offset) == 1 && *(p + DR_name_offset) == '\001') continue; - child = parse_file_info(a, parent, p); + child = parse_file_info(a, parent, p, b - p); if (child == NULL) { __archive_read_consume(a, skip_size); return (ARCHIVE_FATAL); @@ -1112,7 +1113,7 @@ choose_volume(struct archive_read *a, st */ seenJoliet = iso9660->seenJoliet;/* Save flag. */ iso9660->seenJoliet = 0; - file = parse_file_info(a, NULL, block); + file = parse_file_info(a, NULL, block, vd->size); if (file == NULL) return (ARCHIVE_FATAL); iso9660->seenJoliet = seenJoliet; @@ -1144,7 +1145,7 @@ choose_volume(struct archive_read *a, st return (ARCHIVE_FATAL); } iso9660->seenJoliet = 0; - file = parse_file_info(a, NULL, block); + file = parse_file_info(a, NULL, block, vd->size); if (file == NULL) return (ARCHIVE_FATAL); iso9660->seenJoliet = seenJoliet; @@ -1723,8 +1724,7 @@ archive_read_format_iso9660_cleanup(stru free(iso9660->read_ce_req.reqs); archive_string_free(&iso9660->pathname); archive_string_free(&iso9660->previous_pathname); - if (iso9660->pending_files.files) - free(iso9660->pending_files.files); + free(iso9660->pending_files.files); #ifdef HAVE_ZLIB_H free(iso9660->entry_zisofs.uncompressed_buffer); free(iso9660->entry_zisofs.block_pointers); @@ -1749,7 +1749,7 @@ archive_read_format_iso9660_cleanup(stru */ static struct file_info * parse_file_info(struct archive_read *a, struct file_info *parent, - const unsigned char *isodirrec) + const unsigned char *isodirrec, size_t reclen) { struct iso9660 *iso9660; struct file_info *file, *filep; @@ -1763,16 +1763,20 @@ parse_file_info(struct archive_read *a, iso9660 = (struct iso9660 *)(a->format->data); - dr_len = (size_t)isodirrec[DR_length_offset]; - name_len = (size_t)isodirrec[DR_name_len_offset]; - location = archive_le32dec(isodirrec + DR_extent_offset); - fsize = toi(isodirrec + DR_size_offset, DR_size_size); - /* Sanity check that dr_len needs at least 34. */ - if (dr_len < 34) { + if (reclen != 0) + dr_len = (size_t)isodirrec[DR_length_offset]; + /* + * Sanity check that reclen is not zero and dr_len is greater than + * reclen but at least 34 + */ + if (reclen == 0 || reclen < dr_len || dr_len < 34) { archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, - "Invalid length of directory record"); + "Invalid length of directory record"); return (NULL); } + name_len = (size_t)isodirrec[DR_name_len_offset]; + location = archive_le32dec(isodirrec + DR_extent_offset); + fsize = toi(isodirrec + DR_size_offset, DR_size_size); /* Sanity check that name_len doesn't exceed dr_len. */ if (dr_len - 33 < name_len || name_len == 0) { archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, @@ -2097,6 +2101,7 @@ parse_rockridge(struct archive_read *a, const unsigned char *p, const unsigned char *end) { struct iso9660 *iso9660; + int entry_seen = 0; iso9660 = (struct iso9660 *)(a->format->data); @@ -2252,8 +2257,16 @@ parse_rockridge(struct archive_read *a, } p += p[2]; + entry_seen = 1; + } + + if (entry_seen) + return (ARCHIVE_OK); + else { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Tried to parse Rockridge extensions, but none found"); + return (ARCHIVE_WARN); } - return (ARCHIVE_OK); } static int @@ -3021,10 +3034,10 @@ heap_add_entry(struct archive_read *a, s ENOMEM, "Out of memory"); return (ARCHIVE_FATAL); } - memcpy(new_pending_files, heap->files, - heap->allocated * sizeof(new_pending_files[0])); - if (heap->files != NULL) - free(heap->files); + if (heap->allocated) + memcpy(new_pending_files, heap->files, + heap->allocated * sizeof(new_pending_files[0])); + free(heap->files); heap->files = new_pending_files; heap->allocated = new_size; } 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.3 src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c:1.4 --- src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c:1.3 Thu Apr 20 13:01:40 2017 +++ src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c Wed Jul 24 14:03:57 2019 @@ -180,16 +180,21 @@ archive_write_ar_header(struct archive_w } memset(buff, ' ', 60); - strncpy(&buff[AR_fmag_offset], "`\n", 2); + memcpy(&buff[AR_fmag_offset], "`\n", 2); if (strcmp(pathname, "/") == 0 ) { /* Entry is archive symbol table in GNU format */ buff[AR_name_offset] = '/'; goto stat; } + if (strcmp(pathname, "/SYM64/") == 0) { + /* Entry is archive symbol table in GNU 64-bit format */ + memcpy(buff + AR_name_offset, "/SYM64/", 7); + goto stat; + } if (strcmp(pathname, "__.SYMDEF") == 0) { /* Entry is archive symbol table in BSD format */ - strncpy(buff + AR_name_offset, "__.SYMDEF", 9); + memcpy(buff + AR_name_offset, "__.SYMDEF", 9); goto stat; } if (strcmp(pathname, "//") == 0) { @@ -225,7 +230,7 @@ archive_write_ar_header(struct archive_w * actually 15 bytes. */ if (strlen(filename) <= 15) { - strncpy(&buff[AR_name_offset], + memcpy(&buff[AR_name_offset], filename, strlen(filename)); buff[AR_name_offset + strlen(filename)] = '/'; } else { @@ -248,7 +253,7 @@ archive_write_ar_header(struct archive_w return (ARCHIVE_FATAL); } - strncpy(se, filename, strlen(filename)); + memcpy(se, filename, strlen(filename)); strcpy(se + strlen(filename), "/\n"); ss = strstr(ar->strtab, se); @@ -285,11 +290,11 @@ archive_write_ar_header(struct archive_w * archive header. */ if (strlen(filename) <= 16 && strchr(filename, ' ') == NULL) { - strncpy(&buff[AR_name_offset], filename, strlen(filename)); + memcpy(&buff[AR_name_offset], filename, strlen(filename)); buff[AR_name_offset + strlen(filename)] = ' '; } else { - strncpy(buff + AR_name_offset, "#1/", 3); + memcpy(buff + AR_name_offset, "#1/", 3); if (format_decimal(strlen(filename), buff + AR_name_offset + 3, AR_name_size - 3)) { @@ -374,13 +379,14 @@ archive_write_ar_data(struct archive_wri return (ARCHIVE_WARN); } - ar->strtab = (char *)malloc(s); + ar->strtab = (char *)malloc(s + 1); if (ar->strtab == NULL) { archive_set_error(&a->archive, ENOMEM, "Can't allocate strtab buffer"); return (ARCHIVE_FATAL); } - strncpy(ar->strtab, buff, s); + memcpy(ar->strtab, buff, s); + ar->strtab[s] = '\0'; ar->has_strtab = 1; } 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.3 src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c:1.4 --- src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c:1.3 Thu Apr 20 13:01:40 2017 +++ src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c Wed Jul 24 14:03:57 2019 @@ -169,8 +169,7 @@ archive_write_shar_header(struct archive } /* Save the entry for the closing. */ - if (shar->entry) - archive_entry_free(shar->entry); + archive_entry_free(shar->entry); shar->entry = archive_entry_clone(entry); name = archive_entry_pathname(entry); @@ -289,8 +288,7 @@ archive_write_shar_header(struct archive "mkdir -p %s > /dev/null 2>&1\n", shar->quoted_name.s); /* Record that we just created this directory. */ - if (shar->last_dir != NULL) - free(shar->last_dir); + free(shar->last_dir); shar->last_dir = strdup(name); /* Trim a trailing '/'. */ 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.3 src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c:1.4 --- src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c:1.3 Thu Apr 20 13:01:40 2017 +++ src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c Wed Jul 24 14:03:57 2019 @@ -352,14 +352,12 @@ archive_write_ustar_header(struct archiv #endif ret = __archive_write_format_header_ustar(a, buff, entry, -1, 1, sconv); if (ret < ARCHIVE_WARN) { - if (entry_main) - archive_entry_free(entry_main); + archive_entry_free(entry_main); return (ret); } ret2 = __archive_write_output(a, buff, 512); if (ret2 < ARCHIVE_WARN) { - if (entry_main) - archive_entry_free(entry_main); + archive_entry_free(entry_main); return (ret2); } if (ret2 < ret) @@ -367,8 +365,7 @@ archive_write_ustar_header(struct archiv ustar->entry_bytes_remaining = archive_entry_size(entry); ustar->entry_padding = 0x1ff & (-(int64_t)ustar->entry_bytes_remaining); - if (entry_main) - archive_entry_free(entry_main); + archive_entry_free(entry_main); return (ret); } Index: src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c diff -u src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c:1.2 src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c:1.3 --- src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c:1.2 Thu Apr 20 13:01:40 2017 +++ src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c Wed Jul 24 14:03:57 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: archive_pack_dev.c,v 1.2 2017/04/20 13:01:40 joerg Exp $ */ +/* $NetBSD: archive_pack_dev.c,v 1.3 2019/07/24 14:03:57 joerg Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #endif #if !defined(lint) -__RCSID("$NetBSD: archive_pack_dev.c,v 1.2 2017/04/20 13:01:40 joerg Exp $"); +__RCSID("$NetBSD: archive_pack_dev.c,v 1.3 2019/07/24 14:03:57 joerg Exp $"); #endif /* not lint */ #ifdef HAVE_LIMITS_H @@ -57,6 +57,12 @@ __RCSID("$NetBSD: archive_pack_dev.c,v 1 #ifdef HAVE_SYS_STAT_H #include <sys/stat.h> #endif +#ifdef HAVE_SYS_SYSMACROS_H +#include <sys/sysmacros.h> +#endif +#ifdef HAVE_SYS_MKDEV_H +#include <sys/mkdev.h> +#endif #ifdef HAVE_UNISTD_H #include <unistd.h> #endif Index: src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h diff -u src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h:1.2 src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h:1.3 --- src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h:1.2 Thu Apr 20 13:01:40 2017 +++ src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h Wed Jul 24 14:03:57 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: archive_pack_dev.h,v 1.2 2017/04/20 13:01:40 joerg Exp $ */ +/* $NetBSD: archive_pack_dev.h,v 1.3 2019/07/24 14:03:57 joerg Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. 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.5 src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c:1.6 --- src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c:1.5 Thu Apr 20 13:01:40 2017 +++ src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c Wed Jul 24 14:03:57 2019 @@ -127,7 +127,7 @@ archive_read_disk_entry_setup_acls(struc /* * Enter working directory and return working pathname of archive_entry. * If a pointer to an integer is provided and its value is below zero - * open a file descriptor on this pahtname. + * open a file descriptor on this pathname. */ const char * archive_read_disk_entry_setup_path(struct archive_read_disk *a, @@ -163,6 +163,9 @@ archive_read_disk_entry_from_file(struct int initial_fd = fd; int r, r1; + archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC, ARCHIVE_STATE_ANY, + "archive_read_disk_entry_from_file"); + archive_clear_error(_a); path = archive_entry_sourcepath(entry); if (path == NULL) @@ -188,7 +191,7 @@ archive_read_disk_entry_from_file(struct } } else #endif - if (stat(path, &s) != 0) { + if (la_stat(path, &s) != 0) { archive_set_error(&a->archive, errno, "Can't stat %s", path); return (ARCHIVE_FAILED); @@ -928,11 +931,10 @@ setup_sparse(struct archive_read_disk *a return (ARCHIVE_OK); /* Does filesystem support the reporting of hole ? */ - if (*fd < 0) { + if (*fd < 0) path = archive_read_disk_entry_setup_path(a, entry, fd); - if (path == NULL) - return (ARCHIVE_FAILED); - } + else + path = NULL; if (*fd >= 0) { #ifdef _PC_MIN_HOLE_SIZE @@ -943,6 +945,8 @@ setup_sparse(struct archive_read_disk *a if (initial_off != 0) lseek(*fd, 0, SEEK_SET); } else { + if (path == NULL) + return (ARCHIVE_FAILED); #ifdef _PC_MIN_HOLE_SIZE if (pathconf(path, _PC_MIN_HOLE_SIZE) <= 0) return (ARCHIVE_OK); Index: src/external/bsd/libarchive/dist/libarchive/archive_write.3 diff -u src/external/bsd/libarchive/dist/libarchive/archive_write.3:1.6 src/external/bsd/libarchive/dist/libarchive/archive_write.3:1.7 --- src/external/bsd/libarchive/dist/libarchive/archive_write.3:1.6 Thu Apr 20 13:01:40 2017 +++ src/external/bsd/libarchive/dist/libarchive/archive_write.3 Wed Jul 24 14:03:57 2019 @@ -71,7 +71,7 @@ support. .\" .Ss Set options See -.Xr archive_read_set_options 3 . +.Xr archive_write_set_options 3 . .\" .Ss Open archive See