Author: mm
Date: Sat Dec 17 02:07:08 2016
New Revision: 310185
URL: https://svnweb.freebsd.org/changeset/base/310185

Log:
  MFV r310115,310184:
  
  Sync libarchive with vendor.
  
  Vendor bugfixes (relevant to FreeBSD):
  PR 830, 831, 833: Spelling fixes
  OSS-Fuzz 227, 230, 239: Fix possible memory leak in archive_read_free()
  OSS-Fuzz 237: Fix heap buffer overflow when reading invalid ar archives
  
  MFC after:    1 week

Added:
  head/contrib/libarchive/libarchive/archive_openssl_evp_private.h
     - copied unchanged from r310184, 
vendor/libarchive/dist/libarchive/archive_openssl_evp_private.h
  head/contrib/libarchive/libarchive/archive_openssl_hmac_private.h
     - copied unchanged from r310184, 
vendor/libarchive/dist/libarchive/archive_openssl_hmac_private.h
Modified:
  head/contrib/libarchive/cat/bsdcat.c
  head/contrib/libarchive/cpio/cpio.c
  head/contrib/libarchive/cpio/test/test_option_lz4.c
  head/contrib/libarchive/libarchive/archive.h
  head/contrib/libarchive/libarchive/archive_acl.c
  head/contrib/libarchive/libarchive/archive_cryptor.c
  head/contrib/libarchive/libarchive/archive_cryptor_private.h
  head/contrib/libarchive/libarchive/archive_digest.c
  head/contrib/libarchive/libarchive/archive_digest_private.h
  head/contrib/libarchive/libarchive/archive_entry.c
  head/contrib/libarchive/libarchive/archive_hmac.c
  head/contrib/libarchive/libarchive/archive_hmac_private.h
  head/contrib/libarchive/libarchive/archive_options.c
  head/contrib/libarchive/libarchive/archive_read.c
  head/contrib/libarchive/libarchive/archive_read_append_filter.c
  head/contrib/libarchive/libarchive/archive_read_disk_posix.c
  head/contrib/libarchive/libarchive/archive_read_extract2.c
  head/contrib/libarchive/libarchive/archive_read_open_memory.c
  head/contrib/libarchive/libarchive/archive_read_private.h
  head/contrib/libarchive/libarchive/archive_read_support_filter_uu.c
  head/contrib/libarchive/libarchive/archive_read_support_format_7zip.c
  head/contrib/libarchive/libarchive/archive_read_support_format_ar.c
  head/contrib/libarchive/libarchive/archive_read_support_format_cpio.c
  head/contrib/libarchive/libarchive/archive_read_support_format_mtree.c
  head/contrib/libarchive/libarchive/archive_read_support_format_rar.c
  head/contrib/libarchive/libarchive/archive_read_support_format_tar.c
  head/contrib/libarchive/libarchive/archive_read_support_format_warc.c
  head/contrib/libarchive/libarchive/archive_string.c
  head/contrib/libarchive/libarchive/archive_write.c
  head/contrib/libarchive/libarchive/archive_write_add_filter_lz4.c
  head/contrib/libarchive/libarchive/archive_write_disk_posix.c
  head/contrib/libarchive/libarchive/archive_write_disk_set_standard_lookup.c
  head/contrib/libarchive/libarchive/archive_write_open_memory.c
  head/contrib/libarchive/libarchive/archive_write_set_format_ar.c
  head/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c
  head/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c
  head/contrib/libarchive/libarchive/archive_write_set_format_pax.c
  head/contrib/libarchive/libarchive/archive_write_set_format_shar.c
  head/contrib/libarchive/libarchive/archive_write_set_format_ustar.c
  head/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c
  head/contrib/libarchive/libarchive/archive_write_set_format_xar.c
  head/contrib/libarchive/libarchive/test/test_archive_read_add_passphrase.c
  head/contrib/libarchive/libarchive/test/test_pax_filename_encoding.c
  head/contrib/libarchive/libarchive/test/test_read_disk_directory_traversals.c
  head/contrib/libarchive/tar/test/test_option_lz4.c
Directory Properties:
  head/contrib/libarchive/   (props changed)

Modified: head/contrib/libarchive/cat/bsdcat.c
==============================================================================
--- head/contrib/libarchive/cat/bsdcat.c        Sat Dec 17 02:01:05 2016        
(r310184)
+++ head/contrib/libarchive/cat/bsdcat.c        Sat Dec 17 02:07:08 2016        
(r310185)
@@ -142,5 +142,8 @@ main(int argc, char **argv)
                        bsdcat_next();
                }
 
+       if (a != NULL)
+               archive_read_free(a);
+
        exit(exit_status);
 }

Modified: head/contrib/libarchive/cpio/cpio.c
==============================================================================
--- head/contrib/libarchive/cpio/cpio.c Sat Dec 17 02:01:05 2016        
(r310184)
+++ head/contrib/libarchive/cpio/cpio.c Sat Dec 17 02:07:08 2016        
(r310185)
@@ -1324,10 +1324,9 @@ lookup_name(struct cpio *cpio, struct na
 
 
        if (*name_cache_variable == NULL) {
-               *name_cache_variable = malloc(sizeof(struct name_cache));
+               *name_cache_variable = calloc(1, sizeof(struct name_cache));
                if (*name_cache_variable == NULL)
                        lafe_errc(1, ENOMEM, "No more memory");
-               memset(*name_cache_variable, 0, sizeof(struct name_cache));
                (*name_cache_variable)->size = name_cache_size;
        }
 

Modified: head/contrib/libarchive/cpio/test/test_option_lz4.c
==============================================================================
--- head/contrib/libarchive/cpio/test/test_option_lz4.c Sat Dec 17 02:01:05 
2016        (r310184)
+++ head/contrib/libarchive/cpio/test/test_option_lz4.c Sat Dec 17 02:07:08 
2016        (r310185)
@@ -63,6 +63,13 @@ DEFINE_TEST(test_option_lz4)
                            "but no such program is available on this system.");
                        return;
                }
+               /* On some systems the error won't be detected until closing
+                  time, by a 127 exit error returned by waitpid. */
+               if (strstr(p, "Error closing") != NULL && !canLz4()) {
+                       skipping("This version of bsdcpio uses an external lz4 
program "
+                           "but no such program is available on this system.");
+                       return;
+               }
                failure("--lz4 option is broken: %s", p);
                assertEqualInt(r, 0);
                return;

Modified: head/contrib/libarchive/libarchive/archive.h
==============================================================================
--- head/contrib/libarchive/libarchive/archive.h        Sat Dec 17 02:01:05 
2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive.h        Sat Dec 17 02:07:08 
2016        (r310185)
@@ -373,7 +373,7 @@ typedef const char *archive_passphrase_c
  *   4) Repeatedly call archive_read_next_header to get information about
  *      successive archive entries.  Call archive_read_data to extract
  *      data for entries of interest.
- *   5) Call archive_read_finish to end processing.
+ *   5) Call archive_read_free to end processing.
  */
 __LA_DECL struct archive       *archive_read_new(void);
 

Modified: head/contrib/libarchive/libarchive/archive_acl.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_acl.c    Sat Dec 17 02:01:05 
2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_acl.c    Sat Dec 17 02:07:08 
2016        (r310185)
@@ -280,11 +280,17 @@ acl_new_entry(struct archive_acl *acl,
                acl->acl_text = NULL;
        }
 
-       /* If there's a matching entry already in the list, overwrite it. */
+       /*
+        * If there's a matching entry already in the list, overwrite it.
+        * NFSv4 entries may be repeated and are not overwritten.
+        *
+        * TODO: compare names of no id is provided (needs more rework)
+        */
        ap = acl->acl_head;
        aq = NULL;
        while (ap != NULL) {
-               if (ap->type == type && ap->tag == tag && ap->id == id) {
+               if (((type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) == 0) &&
+                   ap->type == type && ap->tag == tag && ap->id == id) {
                        if (id != -1 || (tag != ARCHIVE_ENTRY_ACL_USER &&
                            tag != ARCHIVE_ENTRY_ACL_GROUP)) {
                                ap->permset = permset;
@@ -296,10 +302,9 @@ acl_new_entry(struct archive_acl *acl,
        }
 
        /* Add a new entry to the end of the list. */
-       ap = (struct archive_acl_entry *)malloc(sizeof(*ap));
+       ap = (struct archive_acl_entry *)calloc(1, sizeof(*ap));
        if (ap == NULL)
                return (NULL);
-       memset(ap, 0, sizeof(*ap));
        if (aq == NULL)
                acl->acl_head = ap;
        else

Modified: head/contrib/libarchive/libarchive/archive_cryptor.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_cryptor.c        Sat Dec 17 
02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_cryptor.c        Sat Dec 17 
02:07:08 2016        (r310185)
@@ -302,6 +302,8 @@ aes_ctr_release(archive_crypto_ctx *ctx)
 static int
 aes_ctr_init(archive_crypto_ctx *ctx, const uint8_t *key, size_t key_len)
 {
+       if ((ctx->ctx = EVP_CIPHER_CTX_new()) == NULL)
+               return -1;
 
        switch (key_len) {
        case 16: ctx->type = EVP_aes_128_ecb(); break;
@@ -314,7 +316,7 @@ aes_ctr_init(archive_crypto_ctx *ctx, co
        memcpy(ctx->key, key, key_len);
        memset(ctx->nonce, 0, sizeof(ctx->nonce));
        ctx->encr_pos = AES_BLOCK_SIZE;
-       EVP_CIPHER_CTX_init(&ctx->ctx);
+       EVP_CIPHER_CTX_init(ctx->ctx);
        return 0;
 }
 
@@ -324,10 +326,10 @@ aes_ctr_encrypt_counter(archive_crypto_c
        int outl = 0;
        int r;
 
-       r = EVP_EncryptInit_ex(&ctx->ctx, ctx->type, NULL, ctx->key, NULL);
+       r = EVP_EncryptInit_ex(ctx->ctx, ctx->type, NULL, ctx->key, NULL);
        if (r == 0)
                return -1;
-       r = EVP_EncryptUpdate(&ctx->ctx, ctx->encr_buf, &outl, ctx->nonce,
+       r = EVP_EncryptUpdate(ctx->ctx, ctx->encr_buf, &outl, ctx->nonce,
            AES_BLOCK_SIZE);
        if (r == 0 || outl != AES_BLOCK_SIZE)
                return -1;
@@ -337,7 +339,7 @@ aes_ctr_encrypt_counter(archive_crypto_c
 static int
 aes_ctr_release(archive_crypto_ctx *ctx)
 {
-       EVP_CIPHER_CTX_cleanup(&ctx->ctx);
+       EVP_CIPHER_CTX_free(ctx->ctx);
        memset(ctx->key, 0, ctx->key_len);
        memset(ctx->nonce, 0, sizeof(ctx->nonce));
        return 0;

Modified: head/contrib/libarchive/libarchive/archive_cryptor_private.h
==============================================================================
--- head/contrib/libarchive/libarchive/archive_cryptor_private.h        Sat Dec 
17 02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_cryptor_private.h        Sat Dec 
17 02:07:08 2016        (r310185)
@@ -99,12 +99,12 @@ typedef struct {
 } archive_crypto_ctx;
 
 #elif defined(HAVE_LIBCRYPTO)
-#include <openssl/evp.h>
+#include "archive_openssl_evp_private.h"
 #define AES_BLOCK_SIZE 16
 #define AES_MAX_KEY_SIZE 32
 
 typedef struct {
-       EVP_CIPHER_CTX  ctx;
+       EVP_CIPHER_CTX  *ctx;
        const EVP_CIPHER *type;
        uint8_t         key[AES_MAX_KEY_SIZE];
        unsigned        key_len;

Modified: head/contrib/libarchive/libarchive/archive_digest.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_digest.c Sat Dec 17 02:01:05 
2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_digest.c Sat Dec 17 02:07:08 
2016        (r310185)
@@ -207,7 +207,9 @@ __archive_nettle_md5final(archive_md5_ct
 static int
 __archive_openssl_md5init(archive_md5_ctx *ctx)
 {
-  EVP_DigestInit(ctx, EVP_md5());
+  if ((*ctx = EVP_MD_CTX_new()) == NULL)
+       return (ARCHIVE_FAILED);
+  EVP_DigestInit(*ctx, EVP_md5());
   return (ARCHIVE_OK);
 }
 
@@ -215,7 +217,7 @@ static int
 __archive_openssl_md5update(archive_md5_ctx *ctx, const void *indata,
     size_t insize)
 {
-  EVP_DigestUpdate(ctx, indata, insize);
+  EVP_DigestUpdate(*ctx, indata, insize);
   return (ARCHIVE_OK);
 }
 
@@ -226,8 +228,11 @@ __archive_openssl_md5final(archive_md5_c
    * this is meant to cope with that. Real fix is probably to fix
    * archive_write_set_format_xar.c
    */
-  if (ctx->digest)
-    EVP_DigestFinal(ctx, md, NULL);
+  if (*ctx) {
+    EVP_DigestFinal(*ctx, md, NULL);
+    EVP_MD_CTX_free(*ctx);
+    *ctx = NULL;
+  }
   return (ARCHIVE_OK);
 }
 
@@ -359,7 +364,9 @@ __archive_nettle_ripemd160final(archive_
 static int
 __archive_openssl_ripemd160init(archive_rmd160_ctx *ctx)
 {
-  EVP_DigestInit(ctx, EVP_ripemd160());
+  if ((*ctx = EVP_MD_CTX_new()) == NULL)
+       return (ARCHIVE_FAILED);
+  EVP_DigestInit(*ctx, EVP_ripemd160());
   return (ARCHIVE_OK);
 }
 
@@ -367,14 +374,18 @@ static int
 __archive_openssl_ripemd160update(archive_rmd160_ctx *ctx, const void *indata,
     size_t insize)
 {
-  EVP_DigestUpdate(ctx, indata, insize);
+  EVP_DigestUpdate(*ctx, indata, insize);
   return (ARCHIVE_OK);
 }
 
 static int
 __archive_openssl_ripemd160final(archive_rmd160_ctx *ctx, void *md)
 {
-  EVP_DigestFinal(ctx, md, NULL);
+  if (*ctx) {
+    EVP_DigestFinal(*ctx, md, NULL);
+    EVP_MD_CTX_free(*ctx);
+    *ctx = NULL;
+  }
   return (ARCHIVE_OK);
 }
 
@@ -509,7 +520,9 @@ __archive_nettle_sha1final(archive_sha1_
 static int
 __archive_openssl_sha1init(archive_sha1_ctx *ctx)
 {
-  EVP_DigestInit(ctx, EVP_sha1());
+  if ((*ctx = EVP_MD_CTX_new()) == NULL)
+       return (ARCHIVE_FAILED);
+  EVP_DigestInit(*ctx, EVP_sha1());
   return (ARCHIVE_OK);
 }
 
@@ -517,7 +530,7 @@ static int
 __archive_openssl_sha1update(archive_sha1_ctx *ctx, const void *indata,
     size_t insize)
 {
-  EVP_DigestUpdate(ctx, indata, insize);
+  EVP_DigestUpdate(*ctx, indata, insize);
   return (ARCHIVE_OK);
 }
 
@@ -528,8 +541,11 @@ __archive_openssl_sha1final(archive_sha1
    * this is meant to cope with that. Real fix is probably to fix
    * archive_write_set_format_xar.c
    */
-  if (ctx->digest)
-    EVP_DigestFinal(ctx, md, NULL);
+  if (*ctx) {
+    EVP_DigestFinal(*ctx, md, NULL);
+    EVP_MD_CTX_free(*ctx);
+    *ctx = NULL;
+  }
   return (ARCHIVE_OK);
 }
 
@@ -733,7 +749,9 @@ __archive_nettle_sha256final(archive_sha
 static int
 __archive_openssl_sha256init(archive_sha256_ctx *ctx)
 {
-  EVP_DigestInit(ctx, EVP_sha256());
+  if ((*ctx = EVP_MD_CTX_new()) == NULL)
+       return (ARCHIVE_FAILED);
+  EVP_DigestInit(*ctx, EVP_sha256());
   return (ARCHIVE_OK);
 }
 
@@ -741,14 +759,18 @@ static int
 __archive_openssl_sha256update(archive_sha256_ctx *ctx, const void *indata,
     size_t insize)
 {
-  EVP_DigestUpdate(ctx, indata, insize);
+  EVP_DigestUpdate(*ctx, indata, insize);
   return (ARCHIVE_OK);
 }
 
 static int
 __archive_openssl_sha256final(archive_sha256_ctx *ctx, void *md)
 {
-  EVP_DigestFinal(ctx, md, NULL);
+  if (*ctx) {
+    EVP_DigestFinal(*ctx, md, NULL);
+    EVP_MD_CTX_free(*ctx);
+    *ctx = NULL;
+  }
   return (ARCHIVE_OK);
 }
 
@@ -928,7 +950,9 @@ __archive_nettle_sha384final(archive_sha
 static int
 __archive_openssl_sha384init(archive_sha384_ctx *ctx)
 {
-  EVP_DigestInit(ctx, EVP_sha384());
+  if ((*ctx = EVP_MD_CTX_new()) == NULL)
+       return (ARCHIVE_FAILED);
+  EVP_DigestInit(*ctx, EVP_sha384());
   return (ARCHIVE_OK);
 }
 
@@ -936,14 +960,18 @@ static int
 __archive_openssl_sha384update(archive_sha384_ctx *ctx, const void *indata,
     size_t insize)
 {
-  EVP_DigestUpdate(ctx, indata, insize);
+  EVP_DigestUpdate(*ctx, indata, insize);
   return (ARCHIVE_OK);
 }
 
 static int
 __archive_openssl_sha384final(archive_sha384_ctx *ctx, void *md)
 {
-  EVP_DigestFinal(ctx, md, NULL);
+  if (*ctx) {
+    EVP_DigestFinal(*ctx, md, NULL);
+    EVP_MD_CTX_free(*ctx);
+    *ctx = NULL;
+  }
   return (ARCHIVE_OK);
 }
 
@@ -1147,7 +1175,9 @@ __archive_nettle_sha512final(archive_sha
 static int
 __archive_openssl_sha512init(archive_sha512_ctx *ctx)
 {
-  EVP_DigestInit(ctx, EVP_sha512());
+  if ((*ctx = EVP_MD_CTX_new()) == NULL)
+       return (ARCHIVE_FAILED);
+  EVP_DigestInit(*ctx, EVP_sha512());
   return (ARCHIVE_OK);
 }
 
@@ -1155,14 +1185,18 @@ static int
 __archive_openssl_sha512update(archive_sha512_ctx *ctx, const void *indata,
     size_t insize)
 {
-  EVP_DigestUpdate(ctx, indata, insize);
+  EVP_DigestUpdate(*ctx, indata, insize);
   return (ARCHIVE_OK);
 }
 
 static int
 __archive_openssl_sha512final(archive_sha512_ctx *ctx, void *md)
 {
-  EVP_DigestFinal(ctx, md, NULL);
+  if (*ctx) {
+    EVP_DigestFinal(*ctx, md, NULL);
+    EVP_MD_CTX_free(*ctx);
+    *ctx = NULL;
+  }
   return (ARCHIVE_OK);
 }
 

Modified: head/contrib/libarchive/libarchive/archive_digest_private.h
==============================================================================
--- head/contrib/libarchive/libarchive/archive_digest_private.h Sat Dec 17 
02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_digest_private.h Sat Dec 17 
02:07:08 2016        (r310185)
@@ -134,7 +134,7 @@
   defined(ARCHIVE_CRYPTO_SHA384_OPENSSL) ||\
   defined(ARCHIVE_CRYPTO_SHA512_OPENSSL)
 #define        ARCHIVE_CRYPTO_OPENSSL 1
-#include <openssl/evp.h>
+#include "archive_openssl_evp_private.h"
 #endif
 
 /* Windows crypto headers */
@@ -161,7 +161,7 @@ typedef CC_MD5_CTX archive_md5_ctx;
 #elif defined(ARCHIVE_CRYPTO_MD5_NETTLE)
 typedef struct md5_ctx archive_md5_ctx;
 #elif defined(ARCHIVE_CRYPTO_MD5_OPENSSL)
-typedef EVP_MD_CTX archive_md5_ctx;
+typedef EVP_MD_CTX *archive_md5_ctx;
 #elif defined(ARCHIVE_CRYPTO_MD5_WIN)
 typedef Digest_CTX archive_md5_ctx;
 #else
@@ -175,7 +175,7 @@ typedef RIPEMD160_CTX archive_rmd160_ctx
 #elif defined(ARCHIVE_CRYPTO_RMD160_NETTLE)
 typedef struct ripemd160_ctx archive_rmd160_ctx;
 #elif defined(ARCHIVE_CRYPTO_RMD160_OPENSSL)
-typedef EVP_MD_CTX archive_rmd160_ctx;
+typedef EVP_MD_CTX *archive_rmd160_ctx;
 #else
 typedef unsigned char archive_rmd160_ctx;
 #endif
@@ -189,7 +189,7 @@ typedef CC_SHA1_CTX archive_sha1_ctx;
 #elif defined(ARCHIVE_CRYPTO_SHA1_NETTLE)
 typedef struct sha1_ctx archive_sha1_ctx;
 #elif defined(ARCHIVE_CRYPTO_SHA1_OPENSSL)
-typedef EVP_MD_CTX archive_sha1_ctx;
+typedef EVP_MD_CTX *archive_sha1_ctx;
 #elif defined(ARCHIVE_CRYPTO_SHA1_WIN)
 typedef Digest_CTX archive_sha1_ctx;
 #else
@@ -209,7 +209,7 @@ typedef CC_SHA256_CTX archive_sha256_ctx
 #elif defined(ARCHIVE_CRYPTO_SHA256_NETTLE)
 typedef struct sha256_ctx archive_sha256_ctx;
 #elif defined(ARCHIVE_CRYPTO_SHA256_OPENSSL)
-typedef EVP_MD_CTX archive_sha256_ctx;
+typedef EVP_MD_CTX *archive_sha256_ctx;
 #elif defined(ARCHIVE_CRYPTO_SHA256_WIN)
 typedef Digest_CTX archive_sha256_ctx;
 #else
@@ -227,7 +227,7 @@ typedef CC_SHA512_CTX archive_sha384_ctx
 #elif defined(ARCHIVE_CRYPTO_SHA384_NETTLE)
 typedef struct sha384_ctx archive_sha384_ctx;
 #elif defined(ARCHIVE_CRYPTO_SHA384_OPENSSL)
-typedef EVP_MD_CTX archive_sha384_ctx;
+typedef EVP_MD_CTX *archive_sha384_ctx;
 #elif defined(ARCHIVE_CRYPTO_SHA384_WIN)
 typedef Digest_CTX archive_sha384_ctx;
 #else
@@ -247,7 +247,7 @@ typedef CC_SHA512_CTX archive_sha512_ctx
 #elif defined(ARCHIVE_CRYPTO_SHA512_NETTLE)
 typedef struct sha512_ctx archive_sha512_ctx;
 #elif defined(ARCHIVE_CRYPTO_SHA512_OPENSSL)
-typedef EVP_MD_CTX archive_sha512_ctx;
+typedef EVP_MD_CTX *archive_sha512_ctx;
 #elif defined(ARCHIVE_CRYPTO_SHA512_WIN)
 typedef Digest_CTX archive_sha512_ctx;
 #else

Modified: head/contrib/libarchive/libarchive/archive_entry.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_entry.c  Sat Dec 17 02:01:05 
2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_entry.c  Sat Dec 17 02:07:08 
2016        (r310185)
@@ -248,10 +248,9 @@ archive_entry_new2(struct archive *a)
 {
        struct archive_entry *entry;
 
-       entry = (struct archive_entry *)malloc(sizeof(*entry));
+       entry = (struct archive_entry *)calloc(1, sizeof(*entry));
        if (entry == NULL)
                return (NULL);
-       memset(entry, 0, sizeof(*entry));
        entry->archive = a;
        return (entry);
 }

Modified: head/contrib/libarchive/libarchive/archive_hmac.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_hmac.c   Sat Dec 17 02:01:05 
2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_hmac.c   Sat Dec 17 02:07:08 
2016        (r310185)
@@ -176,8 +176,10 @@ __hmac_sha1_cleanup(archive_hmac_sha1_ct
 static int
 __hmac_sha1_init(archive_hmac_sha1_ctx *ctx, const uint8_t *key, size_t 
key_len)
 {
-       HMAC_CTX_init(ctx);
-       HMAC_Init(ctx, key, key_len, EVP_sha1());
+       *ctx = HMAC_CTX_new();
+       if (*ctx == NULL)
+               return -1;
+       HMAC_Init_ex(*ctx, key, key_len, EVP_sha1(), NULL);
        return 0;
 }
 
@@ -185,22 +187,22 @@ static void
 __hmac_sha1_update(archive_hmac_sha1_ctx *ctx, const uint8_t *data,
     size_t data_len)
 {
-       HMAC_Update(ctx, data, data_len);
+       HMAC_Update(*ctx, data, data_len);
 }
 
 static void
 __hmac_sha1_final(archive_hmac_sha1_ctx *ctx, uint8_t *out, size_t *out_len)
 {
        unsigned int len = (unsigned int)*out_len;
-       HMAC_Final(ctx, out, &len);
+       HMAC_Final(*ctx, out, &len);
        *out_len = len;
 }
 
 static void
 __hmac_sha1_cleanup(archive_hmac_sha1_ctx *ctx)
 {
-       HMAC_CTX_cleanup(ctx);
-       memset(ctx, 0, sizeof(*ctx));
+       HMAC_CTX_free(*ctx);
+       *ctx = NULL;
 }
 
 #else

Modified: head/contrib/libarchive/libarchive/archive_hmac_private.h
==============================================================================
--- head/contrib/libarchive/libarchive/archive_hmac_private.h   Sat Dec 17 
02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_hmac_private.h   Sat Dec 17 
02:07:08 2016        (r310185)
@@ -70,9 +70,9 @@ typedef struct {
 typedef        struct hmac_sha1_ctx archive_hmac_sha1_ctx;
 
 #elif defined(HAVE_LIBCRYPTO)
-#include <openssl/hmac.h>
+#include "archive_openssl_hmac_private.h"
 
-typedef        HMAC_CTX archive_hmac_sha1_ctx;
+typedef        HMAC_CTX* archive_hmac_sha1_ctx;
 
 #else
 

Copied: head/contrib/libarchive/libarchive/archive_openssl_evp_private.h (from 
r310184, vendor/libarchive/dist/libarchive/archive_openssl_evp_private.h)
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libarchive/libarchive/archive_openssl_evp_private.h    Sat Dec 
17 02:07:08 2016        (r310185, copy of r310184, 
vendor/libarchive/dist/libarchive/archive_openssl_evp_private.h)
@@ -0,0 +1,48 @@
+/*-
+ * 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.
+ */
+#ifndef ARCHIVE_OPENSSL_EVP_PRIVATE_H_INCLUDED
+#define ARCHIVE_OPENSSL_EVP_PRIVATE_H_INCLUDED
+
+#include <openssl/evp.h>
+#include <openssl/opensslv.h>
+
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#include <stdlib.h> /* malloc, free */
+#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));
+       return ctx;
+}
+
+static inline void EVP_MD_CTX_free(EVP_MD_CTX *ctx)
+{
+       EVP_MD_CTX_cleanup(ctx);
+       memset(ctx, 0, sizeof(*ctx));
+       free(ctx);
+}
+#endif
+
+#endif

Copied: head/contrib/libarchive/libarchive/archive_openssl_hmac_private.h (from 
r310184, vendor/libarchive/dist/libarchive/archive_openssl_hmac_private.h)
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/contrib/libarchive/libarchive/archive_openssl_hmac_private.h   Sat Dec 
17 02:07:08 2016        (r310185, copy of r310184, 
vendor/libarchive/dist/libarchive/archive_openssl_hmac_private.h)
@@ -0,0 +1,48 @@
+/*-
+ * 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.
+ */
+#ifndef ARCHIVE_OPENSSL_HMAC_PRIVATE_H_INCLUDED
+#define ARCHIVE_OPENSSL_HMAC_PRIVATE_H_INCLUDED
+
+#include <openssl/hmac.h>
+#include <openssl/opensslv.h>
+
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#include <stdlib.h> /* malloc, free */
+#include <string.h> /* memset */
+static inline HMAC_CTX *HMAC_CTX_new(void)
+{
+       HMAC_CTX *ctx = (HMAC_CTX *)calloc(1, sizeof(HMAC_CTX));
+       return ctx;
+}
+
+static inline void HMAC_CTX_free(HMAC_CTX *ctx)
+{
+       HMAC_CTX_cleanup(ctx);
+       memset(ctx, 0, sizeof(*ctx));
+       free(ctx);
+}
+#endif
+
+#endif

Modified: head/contrib/libarchive/libarchive/archive_options.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_options.c        Sat Dec 17 
02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_options.c        Sat Dec 17 
02:07:08 2016        (r310185)
@@ -26,6 +26,10 @@
 #include "archive_platform.h"
 __FBSDID("$FreeBSD$");
 
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
 #include "archive_options_private.h"
 
 static const char *
@@ -105,8 +109,11 @@ _archive_set_options(struct archive *a, 
        if (options == NULL || options[0] == '\0')
                return ARCHIVE_OK;
 
-       data = (char *)malloc(strlen(options) + 1);
-       strcpy(data, options);
+       if ((data = strdup(options)) == NULL) {
+               archive_set_error(a,
+                   ENOMEM, "Out of memory adding file to list");
+               return (ARCHIVE_FATAL);
+       }
        s = (const char *)data;
 
        do {

Modified: head/contrib/libarchive/libarchive/archive_read.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read.c   Sat Dec 17 02:01:05 
2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read.c   Sat Dec 17 02:07:08 
2016        (r310185)
@@ -57,6 +57,7 @@ __FBSDID("$FreeBSD$");
 
 static int     choose_filters(struct archive_read *);
 static int     choose_format(struct archive_read *);
+static int     close_filters(struct archive_read *);
 static struct archive_vtable *archive_read_vtable(void);
 static int64_t _archive_filter_bytes(struct archive *, int);
 static int     _archive_filter_code(struct archive *, int);
@@ -528,7 +529,7 @@ archive_read_open1(struct archive *_a)
        {
                slot = choose_format(a);
                if (slot < 0) {
-                       __archive_read_close_filters(a);
+                       close_filters(a);
                        a->archive.state = ARCHIVE_STATE_FATAL;
                        return (ARCHIVE_FATAL);
                }
@@ -582,7 +583,6 @@ choose_filters(struct archive_read *a)
                        /* Verify the filter by asking it for some data. */
                        __archive_read_filter_ahead(a->filter, 1, &avail);
                        if (avail < 0) {
-                               __archive_read_close_filters(a);
                                __archive_read_free_filters(a);
                                return (ARCHIVE_FATAL);
                        }
@@ -601,7 +601,6 @@ choose_filters(struct archive_read *a)
                a->filter = filter;
                r = (best_bidder->init)(a->filter);
                if (r != ARCHIVE_OK) {
-                       __archive_read_close_filters(a);
                        __archive_read_free_filters(a);
                        return (ARCHIVE_FATAL);
                }
@@ -986,8 +985,8 @@ _archive_read_data_block(struct archive 
        return (a->format->read_data)(a, buff, size, offset);
 }
 
-int
-__archive_read_close_filters(struct archive_read *a)
+static int
+close_filters(struct archive_read *a)
 {
        struct archive_read_filter *f = a->filter;
        int r = ARCHIVE_OK;
@@ -1010,6 +1009,9 @@ __archive_read_close_filters(struct arch
 void
 __archive_read_free_filters(struct archive_read *a)
 {
+       /* Make sure filters are closed and their buffers are freed */
+       close_filters(a);
+
        while (a->filter != NULL) {
                struct archive_read_filter *t = a->filter->upstream;
                free(a->filter);
@@ -1052,7 +1054,7 @@ _archive_read_close(struct archive *_a)
        /* TODO: Clean up the formatters. */
 
        /* Release the filter objects. */
-       r1 = __archive_read_close_filters(a);
+       r1 = close_filters(a);
        if (r1 < r)
                r = r1;
 

Modified: head/contrib/libarchive/libarchive/archive_read_append_filter.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_append_filter.c     Sat Dec 
17 02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read_append_filter.c     Sat Dec 
17 02:07:08 2016        (r310185)
@@ -133,7 +133,6 @@ archive_read_append_filter(struct archiv
     a->filter = filter;
     r2 = (bidder->init)(a->filter);
     if (r2 != ARCHIVE_OK) {
-      __archive_read_close_filters(a);
       __archive_read_free_filters(a);
       return (ARCHIVE_FATAL);
     }
@@ -191,7 +190,6 @@ archive_read_append_filter_program_signa
   a->filter = filter;
   r = (bidder->init)(a->filter);
   if (r != ARCHIVE_OK) {
-    __archive_read_close_filters(a);
     __archive_read_free_filters(a);
     return (ARCHIVE_FATAL);
   }

Modified: head/contrib/libarchive/libarchive/archive_read_disk_posix.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_disk_posix.c        Sat Dec 
17 02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read_disk_posix.c        Sat Dec 
17 02:07:08 2016        (r310185)
@@ -244,7 +244,7 @@ struct tree {
        int                      initial_filesystem_id;
        int                      current_filesystem_id;
        int                      max_filesystem_id;
-       int                      allocated_filesytem;
+       int                      allocated_filesystem;
 
        int                      entry_fd;
        int                      entry_eof;
@@ -1382,7 +1382,7 @@ update_current_filesystem(struct archive
 
        for (i = 0; i < t->max_filesystem_id; i++) {
                if (t->filesystem_table[i].dev == dev) {
-                       /* There is the filesytem ID we've already generated. */
+                       /* There is the filesystem ID we've already generated. 
*/
                        t->current_filesystem_id = i;
                        t->current_filesystem = &(t->filesystem_table[i]);
                        return (ARCHIVE_OK);
@@ -1390,10 +1390,10 @@ update_current_filesystem(struct archive
        }
 
        /*
-        * This is the new filesytem which we have to generate a new ID for.
+        * This is the new filesystem which we have to generate a new ID for.
         */
        fid = t->max_filesystem_id++;
-       if (t->max_filesystem_id > t->allocated_filesytem) {
+       if (t->max_filesystem_id > t->allocated_filesystem) {
                size_t s;
                void *p;
 
@@ -1406,7 +1406,7 @@ update_current_filesystem(struct archive
                        return (ARCHIVE_FATAL);
                }
                t->filesystem_table = (struct filesystem *)p;
-               t->allocated_filesytem = s;
+               t->allocated_filesystem = s;
        }
        t->current_filesystem_id = fid;
        t->current_filesystem = &(t->filesystem_table[fid]);
@@ -2063,8 +2063,7 @@ tree_push(struct tree *t, const char *pa
 {
        struct tree_entry *te;
 
-       te = malloc(sizeof(*te));
-       memset(te, 0, sizeof(*te));
+       te = calloc(1, sizeof(*te));
        te->next = t->stack;
        te->parent = t->current;
        if (te->parent)
@@ -2122,9 +2121,8 @@ tree_open(const char *path, int symlink_
 {
        struct tree *t;
 
-       if ((t = malloc(sizeof(*t))) == NULL)
+       if ((t = calloc(1, sizeof(*t))) == NULL)
                return (NULL);
-       memset(t, 0, sizeof(*t));
        archive_string_init(&t->path);
        archive_string_ensure(&t->path, 31);
        t->initial_symlink_mode = symlink_mode;

Modified: head/contrib/libarchive/libarchive/archive_read_extract2.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_extract2.c  Sat Dec 17 
02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read_extract2.c  Sat Dec 17 
02:07:08 2016        (r310185)
@@ -52,12 +52,11 @@ struct archive_read_extract *
 __archive_read_get_extract(struct archive_read *a)
 {
        if (a->extract == NULL) {
-               a->extract = (struct archive_read_extract 
*)malloc(sizeof(*a->extract));
+               a->extract = (struct archive_read_extract *)calloc(1, 
sizeof(*a->extract));
                if (a->extract == NULL) {
                        archive_set_error(&a->archive, ENOMEM, "Can't extract");
                        return (NULL);
                }
-               memset(a->extract, 0, sizeof(*a->extract));
                a->cleanup_archive_extract = archive_read_extract_cleanup;
        }
        return (a->extract);

Modified: head/contrib/libarchive/libarchive/archive_read_open_memory.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_open_memory.c       Sat Dec 
17 02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read_open_memory.c       Sat Dec 
17 02:07:08 2016        (r310185)
@@ -70,12 +70,11 @@ archive_read_open_memory2(struct archive
 {
        struct read_memory_data *mine;
 
-       mine = (struct read_memory_data *)malloc(sizeof(*mine));
+       mine = (struct read_memory_data *)calloc(1, sizeof(*mine));
        if (mine == NULL) {
                archive_set_error(a, ENOMEM, "No memory");
                return (ARCHIVE_FATAL);
        }
-       memset(mine, 0, sizeof(*mine));
        mine->start = mine->p = (const unsigned char *)buff;
        mine->end = mine->start + size;
        mine->read_size = read_size;

Modified: head/contrib/libarchive/libarchive/archive_read_private.h
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_private.h   Sat Dec 17 
02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read_private.h   Sat Dec 17 
02:07:08 2016        (r310185)
@@ -252,7 +252,6 @@ int64_t     __archive_read_consume(struct ar
 int64_t        __archive_read_filter_consume(struct archive_read_filter *, 
int64_t);
 int __archive_read_program(struct archive_read_filter *, const char *);
 void __archive_read_free_filters(struct archive_read *);
-int  __archive_read_close_filters(struct archive_read *);
 struct archive_read_extract *__archive_read_get_extract(struct archive_read *);
 
 

Modified: head/contrib/libarchive/libarchive/archive_read_support_filter_uu.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_support_filter_uu.c Sat Dec 
17 02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read_support_filter_uu.c Sat Dec 
17 02:07:08 2016        (r310185)
@@ -320,30 +320,14 @@ uudecode_bidder_bid(struct archive_read_
                if (l > 45)
                        /* Normally, maximum length is 45(character 'M'). */
                        return (0);
-               while (l && len-nl > 0) {
-                       if (l > 0) {
-                               if (!uuchar[*b++])
-                                       return (0);
-                               if (!uuchar[*b++])
-                                       return (0);
-                               len -= 2;
-                               --l;
-                       }
-                       if (l > 0) {
-                               if (!uuchar[*b++])
-                                       return (0);
-                               --len;
-                               --l;
-                       }
-                       if (l > 0) {
-                               if (!uuchar[*b++])
-                                       return (0);
-                               --len;
-                               --l;
-                       }
+               if (l > len - nl)
+                       return (0); /* Line too short. */
+               while (l) {
+                       if (!uuchar[*b++])
+                               return (0);
+                       --len;
+                       --l;
                }
-               if (len-nl < 0)
-                       return (0);
                if (len-nl == 1 &&
                    (uuchar[*b] ||               /* Check sum. */
                     (*b >= 'a' && *b <= 'z'))) {/* Padding data(MINIX). */

Modified: head/contrib/libarchive/libarchive/archive_read_support_format_7zip.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_support_format_7zip.c       
Sat Dec 17 02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read_support_format_7zip.c       
Sat Dec 17 02:07:08 2016        (r310185)
@@ -213,7 +213,7 @@ struct _7zip {
        int                      header_is_encoded;
        uint64_t                 header_bytes_remaining;
        unsigned long            header_crc32;
-       /* Header offset to check that reading pointes of the file contens
+       /* Header offset to check that reading points of the file contents
         * will not exceed the header. */
        uint64_t                 header_offset;
        /* Base offset of the archive file for a seek in case reading SFX. */

Modified: head/contrib/libarchive/libarchive/archive_read_support_format_ar.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_support_format_ar.c Sat Dec 
17 02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read_support_format_ar.c Sat Dec 
17 02:07:08 2016        (r310185)
@@ -104,13 +104,12 @@ archive_read_support_format_ar(struct ar
        archive_check_magic(_a, ARCHIVE_READ_MAGIC,
            ARCHIVE_STATE_NEW, "archive_read_support_format_ar");
 
-       ar = (struct ar *)malloc(sizeof(*ar));
+       ar = (struct ar *)calloc(1, sizeof(*ar));
        if (ar == NULL) {
                archive_set_error(&a->archive, ENOMEM,
                    "Can't allocate ar data");
                return (ARCHIVE_FATAL);
        }
-       memset(ar, 0, sizeof(*ar));
        ar->strtab = NULL;
 
        r = __archive_read_register_format(a,
@@ -316,7 +315,7 @@ _ar_read_header(struct archive_read *a, 
                 * If we can't look up the real name, warn and return
                 * the entry with the wrong name.
                 */
-               if (ar->strtab == NULL || number > ar->strtab_size) {
+               if (ar->strtab == NULL || number >= ar->strtab_size) {
                        archive_set_error(&a->archive, EINVAL,
                            "Can't find long filename for GNU/SVR4 archive 
entry");
                        archive_entry_copy_pathname(entry, filename);

Modified: head/contrib/libarchive/libarchive/archive_read_support_format_cpio.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_support_format_cpio.c       
Sat Dec 17 02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read_support_format_cpio.c       
Sat Dec 17 02:07:08 2016        (r310185)
@@ -814,8 +814,8 @@ header_odc(struct archive_read *a, struc
  * NOTE: if a filename suffix is ".z", it is the file gziped by afio.
  * it would be nice that we can show uncompressed file size and we can
  * uncompressed file contents automatically, unfortunately we have nothing
- * to get a uncompressed file size while reading each header. it means
- * we also cannot uncompressed file contens under the our framework.
+ * to get a uncompressed file size while reading each header. It means
+ * we also cannot uncompress file contents under our framework.
  */
 static int
 header_afiol(struct archive_read *a, struct cpio *cpio,

Modified: head/contrib/libarchive/libarchive/archive_read_support_format_mtree.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_support_format_mtree.c      
Sat Dec 17 02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read_support_format_mtree.c      
Sat Dec 17 02:07:08 2016        (r310185)
@@ -229,13 +229,12 @@ archive_read_support_format_mtree(struct
        archive_check_magic(_a, ARCHIVE_READ_MAGIC,
            ARCHIVE_STATE_NEW, "archive_read_support_format_mtree");
 
-       mtree = (struct mtree *)malloc(sizeof(*mtree));
+       mtree = (struct mtree *)calloc(1, sizeof(*mtree));
        if (mtree == NULL) {
                archive_set_error(&a->archive, ENOMEM,
                    "Can't allocate mtree data");
                return (ARCHIVE_FATAL);
        }
-       memset(mtree, 0, sizeof(*mtree));
        mtree->fd = -1;
 
        r = __archive_read_register_format(a, mtree, "mtree",

Modified: head/contrib/libarchive/libarchive/archive_read_support_format_rar.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_support_format_rar.c        
Sat Dec 17 02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read_support_format_rar.c        
Sat Dec 17 02:07:08 2016        (r310185)
@@ -647,13 +647,12 @@ archive_read_support_format_rar(struct a
   archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW,
                       "archive_read_support_format_rar");
 
-  rar = (struct rar *)malloc(sizeof(*rar));
+  rar = (struct rar *)calloc(sizeof(*rar), 1);
   if (rar == NULL)
   {
     archive_set_error(&a->archive, ENOMEM, "Can't allocate rar data");
     return (ARCHIVE_FATAL);
   }
-  memset(rar, 0, sizeof(*rar));
 
        /*
         * Until enough data has been read, we cannot tell about

Modified: head/contrib/libarchive/libarchive/archive_read_support_format_tar.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_support_format_tar.c        
Sat Dec 17 02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read_support_format_tar.c        
Sat Dec 17 02:07:08 2016        (r310185)
@@ -297,7 +297,7 @@ archive_read_format_tar_cleanup(struct a
 /*
  * Validate number field
  *
- * This has to be pretty lenient in order to accomodate the enormous
+ * This has to be pretty lenient in order to accommodate the enormous
  * variety of tar writers in the world:
  *  = POSIX (IEEE Std 1003.1-1988) ustar requires octal values with leading
  *    zeros and allows fields to be terminated with space or null characters
@@ -423,7 +423,7 @@ archive_read_format_tar_options(struct a
 
        tar = (struct tar *)(a->format->data);
        if (strcmp(key, "compat-2x")  == 0) {
-               /* Handle UTF-8 filnames as libarchive 2.x */
+               /* Handle UTF-8 filenames as libarchive 2.x */
                tar->compat_2x = (val != NULL && val[0] != 0);
                tar->init_default_conversion = tar->compat_2x;
                return (ARCHIVE_OK);
@@ -2189,12 +2189,11 @@ gnu_add_sparse_entry(struct archive_read
 {
        struct sparse_block *p;
 
-       p = (struct sparse_block *)malloc(sizeof(*p));
+       p = (struct sparse_block *)calloc(1, sizeof(*p));
        if (p == NULL) {
                archive_set_error(&a->archive, ENOMEM, "Out of memory");
                return (ARCHIVE_FATAL);
        }
-       memset(p, 0, sizeof(*p));
        if (tar->sparse_last != NULL)
                tar->sparse_last->next = p;
        else
@@ -2545,7 +2544,7 @@ tar_atol_base_n(const char *p, size_t ch
        last_digit_limit = INT64_MAX % base;
 
        /* the pointer will not be dereferenced if char_cnt is zero
-        * due to the way the && operator is evaulated.
+        * due to the way the && operator is evaluated.
         */
        while (char_cnt != 0 && (*p == ' ' || *p == '\t')) {
                p++;

Modified: head/contrib/libarchive/libarchive/archive_read_support_format_warc.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_read_support_format_warc.c       
Sat Dec 17 02:01:05 2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_read_support_format_warc.c       
Sat Dec 17 02:07:08 2016        (r310185)
@@ -146,12 +146,11 @@ archive_read_support_format_warc(struct 
        archive_check_magic(_a, ARCHIVE_READ_MAGIC,
            ARCHIVE_STATE_NEW, "archive_read_support_format_warc");
 
-       if ((w = malloc(sizeof(*w))) == NULL) {
+       if ((w = calloc(1, sizeof(*w))) == NULL) {
                archive_set_error(&a->archive, ENOMEM,
                    "Can't allocate warc data");
                return (ARCHIVE_FATAL);
        }
-       memset(w, 0, sizeof(*w));
 
        r = __archive_read_register_format(
                a, w, "warc",

Modified: head/contrib/libarchive/libarchive/archive_string.c
==============================================================================
--- head/contrib/libarchive/libarchive/archive_string.c Sat Dec 17 02:01:05 
2016        (r310184)
+++ head/contrib/libarchive/libarchive/archive_string.c Sat Dec 17 02:07:08 
2016        (r310185)
@@ -1992,7 +1992,7 @@ archive_strncat_l(struct archive_string 
 #if HAVE_ICONV
 
 /*
- * Return -1 if conversion failes.
+ * Return -1 if conversion fails.
  */
 static int
 iconv_strncat_in_locale(struct archive_string *as, const void *_p,
@@ -2094,7 +2094,7 @@ iconv_strncat_in_locale(struct archive_s
 
 /*
  * Translate a string from a some CodePage to an another CodePage by
- * Windows APIs, and copy the result. Return -1 if conversion failes.
+ * Windows APIs, and copy the result. Return -1 if conversion fails.
  */
 static int
 strncat_in_codepage(struct archive_string *as,
@@ -3474,7 +3474,7 @@ strncat_from_utf8_libarchive2(struct arc
 

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
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