Author: mm
Date: Thu Sep 20 11:44:36 2018
New Revision: 338827
URL: https://svnweb.freebsd.org/changeset/base/338827

Log:
  MFV r338797:
  Sync libarchive with vendor.
  
  Relevant vendor changes:
    PR #1019: Add allocation check for the zip_entry struct
    Oss-Fuzz #10192: Handle whitespace-only ACL fields correctly
  
  Approved by:  re (kib)
  MFC after:    1 week

Modified:
  head/contrib/libarchive/README.md
  head/contrib/libarchive/libarchive/archive_acl.c
  head/contrib/libarchive/libarchive/archive_cryptor.c
  head/contrib/libarchive/libarchive/archive_read_support_format_ar.c
  head/contrib/libarchive/libarchive/archive_read_support_format_zip.c
  head/contrib/libarchive/libarchive/test/test_sparse_basic.c
  head/contrib/libarchive/test_utils/test_main.c
Directory Properties:
  head/contrib/libarchive/   (props changed)

Modified: head/contrib/libarchive/README.md
==============================================================================
--- head/contrib/libarchive/README.md   Thu Sep 20 10:58:52 2018        
(r338826)
+++ head/contrib/libarchive/README.md   Thu Sep 20 11:44:36 2018        
(r338827)
@@ -78,7 +78,6 @@ Currently, the library automatically detects and reads
   * POSIX pax interchange format
   * POSIX octet-oriented cpio
   * SVR4 ASCII cpio
-  * POSIX octet-oriented cpio
   * Binary cpio (big-endian or little-endian)
   * ISO9660 CD-ROM images (with optional Rockridge or Joliet extensions)
   * ZIP archives (with uncompressed or "deflate" compressed entries, including 
support for encrypted Zip archives)

Modified: head/contrib/libarchive/libarchive/archive_acl.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_acl.c    Thu Sep 20 10:58:52 
2018        (r338826)
+++ head/contrib/libarchive/libarchive/archive_acl.c    Thu Sep 20 11:44:36 
2018        (r338827)
@@ -2058,6 +2058,12 @@ next_field(const char **p, const char **start,
        }
        *sep = **p;
 
+       /* If the field is only whitespace, bail out now. */
+       if (**p == '\0') {
+               *end = *p;
+               return;
+       }
+
        /* Trim trailing whitespace to locate end of field. */
        *end = *p - 1;
        while (**end == ' ' || **end == '\t' || **end == '\n') {

Modified: head/contrib/libarchive/libarchive/archive_cryptor.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_cryptor.c        Thu Sep 20 
10:58:52 2018        (r338826)
+++ head/contrib/libarchive/libarchive/archive_cryptor.c        Thu Sep 20 
11:44:36 2018        (r338827)
@@ -316,7 +316,14 @@ aes_ctr_init(archive_crypto_ctx *ctx, const uint8_t *k
        memcpy(ctx->key, key, key_len);
        memset(ctx->nonce, 0, sizeof(ctx->nonce));
        ctx->encr_pos = AES_BLOCK_SIZE;
+#if OPENSSL_VERSION_NUMBER  >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+       if (!EVP_CIPHER_CTX_reset(ctx->ctx)) {
+               EVP_CIPHER_CTX_free(ctx->ctx);
+               ctx->ctx = NULL;
+       }
+#else
        EVP_CIPHER_CTX_init(ctx->ctx);
+#endif
        return 0;
 }
 

Modified: head/contrib/libarchive/libarchive/archive_read_support_format_ar.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_support_format_ar.c Thu Sep 
20 10:58:52 2018        (r338826)
+++ head/contrib/libarchive/libarchive/archive_read_support_format_ar.c Thu Sep 
20 11:44:36 2018        (r338827)
@@ -459,6 +459,7 @@ ar_parse_common_header(struct ar *ar, struct archive_e
        uint64_t n;
 
        /* Copy remaining header */
+       archive_entry_set_filetype(entry, AE_IFREG);
        archive_entry_set_mtime(entry,
            (time_t)ar_atol10(h + AR_date_offset, AR_date_size), 0L);
        archive_entry_set_uid(entry,

Modified: head/contrib/libarchive/libarchive/archive_read_support_format_zip.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_support_format_zip.c        
Thu Sep 20 10:58:52 2018        (r338826)
+++ head/contrib/libarchive/libarchive/archive_read_support_format_zip.c        
Thu Sep 20 11:44:36 2018        (r338827)
@@ -2708,6 +2708,11 @@ slurp_central_directory(struct archive_read *a, struct
                        return ARCHIVE_FATAL;
 
                zip_entry = calloc(1, sizeof(struct zip_entry));
+               if (zip_entry == NULL) {
+                       archive_set_error(&a->archive, ENOMEM,
+                               "Can't allocate zip entry");
+                       return ARCHIVE_FATAL;
+               }
                zip_entry->next = zip->zip_entries;
                zip_entry->flags |= LA_FROM_CENTRAL_DIRECTORY;
                zip->zip_entries = zip_entry;

Modified: head/contrib/libarchive/libarchive/test/test_sparse_basic.c
==============================================================================
--- head/contrib/libarchive/libarchive/test/test_sparse_basic.c Thu Sep 20 
10:58:52 2018        (r338826)
+++ head/contrib/libarchive/libarchive/test/test_sparse_basic.c Thu Sep 20 
11:44:36 2018        (r338827)
@@ -422,6 +422,7 @@ verify_sparse_file(struct archive *a, const char *path
        assert(sparse->type == END);
        assertEqualInt(expected_offset, archive_entry_size(ae));
 
+       failure(path);
        assertEqualInt(holes_seen, expected_holes);
 
        assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
@@ -457,6 +458,7 @@ verify_sparse_file2(struct archive *a, const char *pat
        /* Verify the number of holes only, not its offset nor its
         * length because those alignments are deeply dependence on
         * its filesystem. */ 
+       failure(path);
        assertEqualInt(blocks, archive_entry_sparse_count(ae));
        archive_entry_free(ae);
 }

Modified: head/contrib/libarchive/test_utils/test_main.c
==============================================================================
--- head/contrib/libarchive/test_utils/test_main.c      Thu Sep 20 10:58:52 
2018        (r338826)
+++ head/contrib/libarchive/test_utils/test_main.c      Thu Sep 20 11:44:36 
2018        (r338827)
@@ -2166,7 +2166,7 @@ void assertVersion(const char *prog, const char *base)
 
        /* Skip arbitrary third-party version numbers. */
        while (s > 0 && (*q == ' ' || *q == '-' || *q == '/' || *q == '.' ||
-           isalnum(*q))) {
+           isalnum((unsigned char)*q))) {
                ++q;
                --s;
        }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to