Source-Changes-HG archive

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

[src/trunk]: src/external/bsd/libarchive/dist/libarchive Merge changes from l...



details:   https://anonhg.NetBSD.org/src/rev/fe5f60bbacf2
branches:  trunk
changeset: 457915:fe5f60bbacf2
user:      joerg <joerg%NetBSD.org@localhost>
date:      Wed Jul 24 14:03:57 2019 +0000

description:
Merge changes from libarchive 3.4.0.

diffstat:

 external/bsd/libarchive/dist/libarchive/archive.h                             |  12 +-
 external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h        |   3 +-
 external/bsd/libarchive/dist/libarchive/archive_pack_dev.c                    |  10 +-
 external/bsd/libarchive/dist/libarchive/archive_pack_dev.h                    |   2 +-
 external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c   |  16 +-
 external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c |  51 ++++++---
 external/bsd/libarchive/dist/libarchive/archive_write.3                       |   2 +-
 external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c         |  22 ++-
 external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c       |   6 +-
 external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c      |   9 +-
 10 files changed, 83 insertions(+), 50 deletions(-)

diffs (truncated from 455 to 300 lines):

diff -r 0a9f38742b78 -r fe5f60bbacf2 external/bsd/libarchive/dist/libarchive/archive.h
--- a/external/bsd/libarchive/dist/libarchive/archive.h Wed Jul 24 13:50:20 2019 +0000
+++ b/external/bsd/libarchive/dist/libarchive/archive.h Wed Jul 24 14:03:57 2019 +0000
@@ -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 @@
 /*
  * 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_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 @@
 #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 @@
 #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_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_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 @@
                     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_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 *,
diff -r 0a9f38742b78 -r fe5f60bbacf2 external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h
--- a/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h    Wed Jul 24 13:50:20 2019 +0000
+++ b/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h    Wed Jul 24 14:03:57 2019 +0000
@@ -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)
diff -r 0a9f38742b78 -r fe5f60bbacf2 external/bsd/libarchive/dist/libarchive/archive_pack_dev.c
--- a/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c        Wed Jul 24 13:50:20 2019 +0000
+++ b/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c        Wed Jul 24 14:03:57 2019 +0000
@@ -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 @@
 #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
diff -r 0a9f38742b78 -r fe5f60bbacf2 external/bsd/libarchive/dist/libarchive/archive_pack_dev.h
--- a/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h        Wed Jul 24 13:50:20 2019 +0000
+++ b/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h        Wed Jul 24 14:03:57 2019 +0000
@@ -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.
diff -r 0a9f38742b78 -r fe5f60bbacf2 external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c
--- a/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c       Wed Jul 24 13:50:20 2019 +0000
+++ b/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c       Wed Jul 24 14:03:57 2019 +0000
@@ -127,7 +127,7 @@
 /*
  * 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 @@
        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 @@
                                }
                        } 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 @@
                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 @@
                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);
diff -r 0a9f38742b78 -r fe5f60bbacf2 external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c
--- a/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c     Wed Jul 24 13:50:20 2019 +0000
+++ b/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c     Wed Jul 24 14:03:57 2019 +0000
@@ -409,7 +409,8 @@
                    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 @@
                        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 @@
         */
        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 @@
                        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 @@
        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 @@
  */
 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 @@
 
        iso9660 = (struct iso9660 *)(a->format->data);
 
-       dr_len = (size_t)isodirrec[DR_length_offset];
+       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");
+               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 dr_len needs at least 34. */
-       if (dr_len < 34) {
-               archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
-                   "Invalid length of directory record");
-               return (NULL);
-       }
        /* 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 @@
     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 @@
                }
 
                p += p[2];
+               entry_seen = 1;
        }
-       return (ARCHIVE_OK);
+
+       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);
+       }
 }
 
 static int
@@ -3021,10 +3034,10 @@



Home | Main Index | Thread Index | Old Index