Author: mm
Date: Tue Feb 12 22:29:41 2019
New Revision: 344063
URL: https://svnweb.freebsd.org/changeset/base/344063

Log:
  Update vendor/libarchive/dist to git 31c0a517c91f44eeee717a04db8b075cadda83d8
  
  Relevant vendor changes:
    PR #1085: Fix a null pointer dereference bug in zip writer
    PR #1110: ZIP reader added support for XZ, LZMA, PPMD8 and BZIP2
              decopmpression
    PR #1116: Add support for 64-bit ar format
    PR #1120: Fix a 7zip crash [1] and a ISO9660 infinite loop [2]
    PR #1125: RAR5 reader - fix an invalid read and a memory leak
    PR #1131: POSIX reader - do not fail when tree_current_lstat() fails
              due to ENOENT [3]
    PR #1134: Delete unnecessary null pointer checks before calls of free()
    OSS-Fuzz 10843: Force intermediate to uint64_t to make UBSAN happy.
    OSS-Fuzz 11011: Avoid buffer overflow in rar5 reader
  
  PR:           233006 [3]
  Security:     CVE-2019-1000019 [1], CVE-2019-1000020 [2]

Added:
  vendor/libarchive/dist/.cirrus.yml
  vendor/libarchive/dist/build/ci/
  vendor/libarchive/dist/build/ci/build.sh   (contents, props changed)
  vendor/libarchive/dist/build/ci/cirrus_ci.sh   (contents, props changed)
  vendor/libarchive/dist/build/ci/test_driver   (contents, props changed)
  vendor/libarchive/dist/libarchive/archive_ppmd8.c   (contents, props changed)
  vendor/libarchive/dist/libarchive/archive_ppmd8_private.h   (contents, props 
changed)
  vendor/libarchive/dist/libarchive/test/test_read_format_zip_bzip2.zipx.uu
  
vendor/libarchive/dist/libarchive/test/test_read_format_zip_bzip2_multi.zipx.uu
  vendor/libarchive/dist/libarchive/test/test_read_format_zip_lzma.zipx.uu
  vendor/libarchive/dist/libarchive/test/test_read_format_zip_lzma_multi.zipx.uu
  vendor/libarchive/dist/libarchive/test/test_read_format_zip_ppmd8.zipx.uu
  
vendor/libarchive/dist/libarchive/test/test_read_format_zip_ppmd8_multi.zipx.uu
  vendor/libarchive/dist/libarchive/test/test_read_format_zip_xz_multi.zipx.uu
Deleted:
  vendor/libarchive/dist/.travis.yml
  vendor/libarchive/dist/build/ci_build.sh
  vendor/libarchive/dist/build/ci_test_driver
  vendor/libarchive/dist/libarchive/test/test_compat_pax_libarchive_2x.c
  vendor/libarchive/dist/libarchive/test/test_compat_pax_libarchive_2x.tar.Z.uu
Modified:
  vendor/libarchive/dist/CMakeLists.txt
  vendor/libarchive/dist/Makefile.am
  vendor/libarchive/dist/contrib/shar/tree.c
  vendor/libarchive/dist/cpio/test/test_option_t.c
  vendor/libarchive/dist/libarchive/CMakeLists.txt
  vendor/libarchive/dist/libarchive/archive_acl.c
  vendor/libarchive/dist/libarchive/archive_disk_acl_sunos.c
  vendor/libarchive/dist/libarchive/archive_entry.c
  vendor/libarchive/dist/libarchive/archive_pack_dev.c
  vendor/libarchive/dist/libarchive/archive_read_disk_posix.c
  vendor/libarchive/dist/libarchive/archive_read_open_file.c
  vendor/libarchive/dist/libarchive/archive_read_support_format_7zip.c
  vendor/libarchive/dist/libarchive/archive_read_support_format_ar.c
  vendor/libarchive/dist/libarchive/archive_read_support_format_cpio.c
  vendor/libarchive/dist/libarchive/archive_read_support_format_iso9660.c
  vendor/libarchive/dist/libarchive/archive_read_support_format_rar5.c
  vendor/libarchive/dist/libarchive/archive_read_support_format_xar.c
  vendor/libarchive/dist/libarchive/archive_read_support_format_zip.c
  vendor/libarchive/dist/libarchive/archive_write_disk_posix.c
  vendor/libarchive/dist/libarchive/archive_write_disk_set_standard_lookup.c
  vendor/libarchive/dist/libarchive/archive_write_disk_windows.c
  vendor/libarchive/dist/libarchive/archive_write_set_format_ar.c
  vendor/libarchive/dist/libarchive/archive_write_set_format_cpio.c
  vendor/libarchive/dist/libarchive/archive_write_set_format_cpio_newc.c
  vendor/libarchive/dist/libarchive/archive_write_set_format_gnutar.c
  vendor/libarchive/dist/libarchive/archive_write_set_format_shar.c
  vendor/libarchive/dist/libarchive/archive_write_set_format_ustar.c
  vendor/libarchive/dist/libarchive/archive_write_set_format_v7tar.c
  vendor/libarchive/dist/libarchive/archive_write_set_format_zip.c
  vendor/libarchive/dist/libarchive/test/CMakeLists.txt
  vendor/libarchive/dist/libarchive/test/test_read_format_zip.c
  vendor/libarchive/dist/test_utils/test_main.c

Added: vendor/libarchive/dist/.cirrus.yml
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ vendor/libarchive/dist/.cirrus.yml  Tue Feb 12 22:29:41 2019        
(r344063)
@@ -0,0 +1,26 @@
+env:
+  CIRRUS_CLONE_DEPTH: 1
+  ARCH: amd64
+
+task:
+  matrix:
+    container:
+      image: fedora:29
+    freebsd_instance:
+      image: freebsd-12-0-release-amd64
+    freebsd_instance:
+      image: freebsd-11-2-release-amd64
+    osx_instance:
+      image: mojave-xcode-10.1
+    osx_instance:
+      image: high-sierra-xcode-10.0
+  matrix:
+    env:
+      BS: autotools
+    env:
+      BS: cmake
+  install_script:
+    - ./build/ci/cirrus_ci.sh install
+  script:
+    - ./build/ci/build.sh
+    - ./build/ci/cirrus_ci.sh test

Modified: vendor/libarchive/dist/CMakeLists.txt
==============================================================================
--- vendor/libarchive/dist/CMakeLists.txt       Tue Feb 12 21:23:59 2019        
(r344062)
+++ vendor/libarchive/dist/CMakeLists.txt       Tue Feb 12 22:29:41 2019        
(r344063)
@@ -183,6 +183,7 @@ OPTION(ENABLE_LIBB2 "Enable the use of the system LIBB
 OPTION(ENABLE_LZ4 "Enable the use of the system LZ4 library if found" ON)
 OPTION(ENABLE_LZO "Enable the use of the system LZO library if found" OFF)
 OPTION(ENABLE_LZMA "Enable the use of the system LZMA library if found" ON)
+OPTION(ENABLE_ZSTD "Enable the use of the system zstd library if found" ON)
 
 OPTION(ENABLE_ZLIB "Enable the use of the system ZLIB library if found" ON)
 OPTION(ENABLE_BZip2 "Enable the use of the system BZip2 library if found" ON)
@@ -458,7 +459,7 @@ MARK_AS_ADVANCED(CLEAR BZIP2_LIBRARIES)
 IF(ENABLE_LZMA)
   FIND_PACKAGE(LibLZMA)
 ELSE()
-  SET(LIBZMA_FOUND FALSE) # Override cached value
+  SET(LIBLZMA_FOUND FALSE) # Override cached value
 ENDIF()
 
 IF(LIBLZMA_FOUND)
@@ -480,6 +481,9 @@ IF(LIBLZMA_FOUND)
 ELSE(LIBLZMA_FOUND)
 # LZMA not found and will not be used.
 ENDIF(LIBLZMA_FOUND)
+MARK_AS_ADVANCED(CLEAR LIBLZMA_INCLUDE_DIR)
+MARK_AS_ADVANCED(CLEAR LIBLZMA_LIBRARY)
+
 #
 # Find LZO2
 #
@@ -569,15 +573,19 @@ MARK_AS_ADVANCED(CLEAR LZ4_LIBRARY)
 #
 # Find Zstd
 #
-IF (ZSTD_INCLUDE_DIR)
-  # Already in cache, be silent
-  SET(ZSTD_FIND_QUIETLY TRUE)
-ENDIF (ZSTD_INCLUDE_DIR)
+IF(ENABLE_ZSTD)
+  IF (ZSTD_INCLUDE_DIR)
+    # Already in cache, be silent
+    SET(ZSTD_FIND_QUIETLY TRUE)
+  ENDIF (ZSTD_INCLUDE_DIR)
 
-FIND_PATH(ZSTD_INCLUDE_DIR zstd.h)
-FIND_LIBRARY(ZSTD_LIBRARY NAMES zstd libzstd)
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZSTD DEFAULT_MSG ZSTD_LIBRARY 
ZSTD_INCLUDE_DIR)
+  FIND_PATH(ZSTD_INCLUDE_DIR zstd.h)
+  FIND_LIBRARY(ZSTD_LIBRARY NAMES zstd libzstd)
+  INCLUDE(FindPackageHandleStandardArgs)
+  FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZSTD DEFAULT_MSG ZSTD_LIBRARY 
ZSTD_INCLUDE_DIR)
+ELSE(ENABLE_ZSTD)
+  SET(ZSTD_FOUND FALSE) # Override cached value
+ENDIF(ENABLE_ZSTD)
 IF(ZSTD_FOUND)
   SET(HAVE_ZSTD_H 1)
   INCLUDE_DIRECTORIES(${ZSTD_INCLUDE_DIR})

Modified: vendor/libarchive/dist/Makefile.am
==============================================================================
--- vendor/libarchive/dist/Makefile.am  Tue Feb 12 21:23:59 2019        
(r344062)
+++ vendor/libarchive/dist/Makefile.am  Tue Feb 12 22:29:41 2019        
(r344063)
@@ -132,6 +132,8 @@ libarchive_la_SOURCES= \
        libarchive/archive_ppmd_private.h \
        libarchive/archive_ppmd7.c \
        libarchive/archive_ppmd7_private.h \
+       libarchive/archive_ppmd8.c \
+       libarchive/archive_ppmd8_private.h \
        libarchive/archive_private.h \
        libarchive/archive_random.c \
        libarchive/archive_random_private.h \
@@ -400,7 +402,6 @@ libarchive_test_SOURCES= \
        libarchive/test/test_compat_lzma.c \
        libarchive/test/test_compat_lzop.c \
        libarchive/test/test_compat_mac.c \
-       libarchive/test/test_compat_pax_libarchive_2x.c \
        libarchive/test/test_compat_perl_archive_tar.c \
        libarchive/test/test_compat_plexus_archiver_tar.c \
        libarchive/test/test_compat_solaris_tar_acl.c \
@@ -671,7 +672,6 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_compat_lzop_3.tar.lzo.uu \
        libarchive/test/test_compat_mac-1.tar.Z.uu \
        libarchive/test/test_compat_mac-2.tar.Z.uu \
-       libarchive/test/test_compat_pax_libarchive_2x.tar.Z.uu \
        libarchive/test/test_compat_perl_archive_tar.tar.uu \
        libarchive/test/test_compat_plexus_archiver_tar.tar.uu \
        libarchive/test/test_compat_solaris_pax_sparse_1.pax.Z.uu \

Added: vendor/libarchive/dist/build/ci/build.sh
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ vendor/libarchive/dist/build/ci/build.sh    Tue Feb 12 22:29:41 2019        
(r344063)
@@ -0,0 +1,112 @@
+#!/bin/sh
+#
+# Automated build and test of libarchive on CI systems
+#
+# Variables that can be passed via environment:
+# BS=                  # build system (autotools or cmake)
+# BUILDDIR=            # build directory
+# SRCDIR=              # source directory
+# CONFIGURE_ARGS=      # configure arguments
+# MAKE_ARGS=           # make arguments
+
+ACTIONS=
+if [ -n "${BUILD_SYSTEM}" ]; then
+       BS="${BUILD_SYSTEM}"
+fi
+BS="${BS:-autotools}"
+MAKE="${MAKE:-make}"
+CMAKE="${CMAKE:-cmake}"
+CURDIR=`pwd`
+SRCDIR="${SRCDIR:-`pwd`}"
+RET=0
+
+usage () {
+       echo "Usage: $0 [-b autotools|cmake] [-a autogen|configure|build|test ] 
[ -a ... ] [ -d builddir ] [-s srcdir ]"
+}
+inputerror () {
+       echo $1
+       usage
+       exit 1
+}
+while getopts a:b:d:s: opt; do
+       case ${opt} in
+               a)
+                       case "${OPTARG}" in
+                               autogen) ;;
+                               configure) ;;
+                               build) ;;
+                               test) ;;
+                               *) inputerror "Invalid action (-a)" ;;
+                       esac
+                       ACTIONS="${ACTIONS} ${OPTARG}"
+               ;;
+               b) BS="${OPTARG}"
+                       case "${BS}" in
+                               autotools) ;;
+                               cmake) ;;
+                               *) inputerror "Invalid build system (-b)" ;;
+                       esac
+               ;;
+               d)
+                       BUILDDIR="${OPTARG}"
+               ;;
+               s)
+                       SRCDIR="${OPTARG}"
+                       if [ ! -f "${SRCDIR}/build/version" ]; then
+                               inputerror "Missing file: 
${SRCDIR}/build/version"
+                       fi
+               ;;
+       esac
+done
+if [ -z "${ACTIONS}" ]; then
+       ACTIONS="autogen configure build test"
+fi
+if [ -z "${BS}" ]; then
+       inputerror "Missing build system (-b) parameter"
+fi
+if [ -z "${BUILDDIR}" ]; then
+       BUILDDIR="${CURDIR}/build_ci/${BS}"
+fi
+mkdir -p "${BUILDDIR}"
+for action in ${ACTIONS}; do
+       cd "${BUILDDIR}"
+       case "${action}" in
+               autogen)
+                       case "${BS}" in
+                               autotools)
+                                       cd "${SRCDIR}"
+                                       sh build/autogen.sh
+                                       RET="$?"
+                               ;;
+                       esac
+               ;;
+               configure)
+                       case "${BS}" in
+                               autotools) "${SRCDIR}/configure" 
${CONFIGURE_ARGS} ;;
+                               cmake) ${CMAKE} ${CONFIGURE_ARGS} "${SRCDIR}" ;;
+                       esac
+                       RET="$?"
+               ;;
+               build)
+                       ${MAKE} ${MAKE_ARGS}
+                       RET="$?"
+               ;;
+               test)
+                       case "${BS}" in
+                               autotools)
+                                       ${MAKE} ${MAKE_ARGS} check 
LOG_DRIVER="${SRCDIR}/build/ci/test_driver"
+                                       ;;
+                               cmake)
+                                       ${MAKE} ${MAKE_ARGS} test
+                                       ;;
+                       esac
+                       RET="$?"
+                       find ${TMPDIR:-/tmp} -path '*_test.*' -name '*.log' 
-print -exec cat {} \;
+               ;;
+       esac
+       if [ "${RET}" != "0" ]; then
+               exit "${RET}"
+       fi
+       cd "${CURDIR}"
+done
+exit "${RET}"

Added: vendor/libarchive/dist/build/ci/cirrus_ci.sh
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ vendor/libarchive/dist/build/ci/cirrus_ci.sh        Tue Feb 12 22:29:41 
2019        (r344063)
@@ -0,0 +1,53 @@
+#!/bin/sh
+UNAME=`uname`
+if [ "$1" = "install" ]
+then
+       if [ "${UNAME}" = "FreeBSD" ]
+       then
+               set -x -e
+               sed -i.bak -e 
's,pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly,pkg+http://pkg.FreeBSD.org/\${ABI}/latest,'
 /etc/pkg/FreeBSD.conf
+               mount -u -o acls /
+               mkdir /tmp_acl_nfsv4
+               MD=`mdconfig -a -t swap -s 128M`
+               newfs /dev/$MD
+               tunefs -N enable /dev/$MD
+               mount /dev/$MD /tmp_acl_nfsv4
+               chmod 1777 /tmp_acl_nfsv4
+               pkg install -y autoconf automake cmake libiconv libtool pkgconf 
expat libxml2 liblz4 zstd
+       elif [ "${UNAME}" = "Darwin" ]
+       then
+               set -x -e
+               brew update
+               brew install autoconf automake libtool pkg-config cmake xz lz4 
zstd
+       elif [ "${UNAME}" = "Linux" ]
+       then
+               if [ -f "/etc/debian_version" ]
+               then
+                       apt-get -y update
+                       apt-get -y install build-essential locales automake 
libtool bison sharutils pkgconf libacl1-dev libbz2-dev libzip-dev zlib1g-dev 
liblzma-dev liblz4-dev libzstd-dev libssl-dev lrzip cmake
+               elif [ -f "/etc/fedora-release" ]
+               then
+                       dnf -y install make cmake gcc gcc-c++ kernel-devel 
automake libtool bison sharutils pkgconf libacl-devel librichacl-devel 
bzip2-devel libzip-devel zlib-devel xz-devel lz4-devel libzstd-devel 
openssl-devel
+               fi
+       fi
+elif [ "$1" = "test" ]
+then
+       if [ "${UNAME}" = "FreeBSD" ]
+       then
+               set -e
+               echo "Additional NFSv4 ACL tests"
+               CURDIR=`pwd`
+               if [ "${BS}" = "cmake" ]
+               then
+                       BIN_SUBDIR="bin"
+               else
+                       BIN_SUBDIR=.
+               fi
+               BUILDDIR="${CURDIR}/build_ci/${BS}"
+               cd "$BUILDDIR"
+               TMPDIR=/tmp_acl_nfsv4 ${BIN_SUBDIR}/libarchive_test -r 
"${CURDIR}/libarchive/test" -v test_acl_platform_nfs4
+       fi
+else
+       echo "Usage $0 install | test_nfsv4_acls"
+       exit 1
+fi

Added: vendor/libarchive/dist/build/ci/test_driver
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ vendor/libarchive/dist/build/ci/test_driver Tue Feb 12 22:29:41 2019        
(r344063)
@@ -0,0 +1,148 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2013-07-13.22; # UTC
+
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-autom...@gnu.org> or send patches to
+# <automake-patc...@gnu.org>.
+
+# Make unconditional expansion of undefined variables an error.  This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+  echo "$0: $*" >&2
+  print_usage >&2
+  exit 2
+}
+
+print_usage ()
+{
+  cat <<END
+Usage:
+  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+              [--expect-failure={yes|no}] [--color-tests={yes|no}]
+              [--enable-hard-errors={yes|no}] [--]
+              TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+test_name= # Used for reporting.
+log_file=  # Where to save the output of the test script.
+trs_file=  # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+  case $1 in
+  --help) print_usage; exit $?;;
+  --version) echo "test-driver $scriptversion"; exit $?;;
+  --test-name) test_name=$2; shift;;
+  --log-file) log_file=$2; shift;;
+  --trs-file) trs_file=$2; shift;;
+  --color-tests) color_tests=$2; shift;;
+  --expect-failure) expect_failure=$2; shift;;
+  --enable-hard-errors) enable_hard_errors=$2; shift;;
+  --) shift; break;;
+  -*) usage_error "invalid option: '$1'";;
+   *) break;;
+  esac
+  shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file"  = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file"  = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+  usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+  usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+  red='' # Red.
+  grn='' # Green.
+  lgn='' # Light green.
+  blu='' # Blue.
+  mgn='' # Magenta.
+  std=''     # No color.
+else
+  red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+( "$@"; echo "$?" > $log_file.s ) | tee $log_file 2>&1
+estatus=`cat $log_file.s`
+
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+  tweaked_estatus=1
+else
+  tweaked_estatus=$estatus
+fi
+
+case $tweaked_estatus:$expect_failure in
+  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
+  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
+  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
+  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
+  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
+esac
+
+# Report the test outcome and exit status in the logs, so that one can
+# know whether the test passed or failed simply by looking at the '.log'
+# file, without the need of also peaking into the corresponding '.trs'
+# file (automake bug#11814).
+echo "$res $test_name (exit status: $estatus)" >>$log_file
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:

Modified: vendor/libarchive/dist/contrib/shar/tree.c
==============================================================================
--- vendor/libarchive/dist/contrib/shar/tree.c  Tue Feb 12 21:23:59 2019        
(r344062)
+++ vendor/libarchive/dist/contrib/shar/tree.c  Tue Feb 12 22:29:41 2019        
(r344063)
@@ -530,8 +530,7 @@ tree_close(struct tree *t)
        /* Release anything remaining in the stack. */
        while (t->stack != NULL)
                tree_pop(t);
-       if (t->buff)
-               free(t->buff);
+       free(t->buff);
        /* chdir() back to where we started. */
        if (t->initialDirFd >= 0) {
                fchdir(t->initialDirFd);

Modified: vendor/libarchive/dist/cpio/test/test_option_t.c
==============================================================================
--- vendor/libarchive/dist/cpio/test/test_option_t.c    Tue Feb 12 21:23:59 
2019        (r344062)
+++ vendor/libarchive/dist/cpio/test/test_option_t.c    Tue Feb 12 22:29:41 
2019        (r344063)
@@ -88,11 +88,11 @@ DEFINE_TEST(test_option_t)
        setlocale(LC_ALL, "");
 #endif
 #if defined(_WIN32) && !defined(__CYGWIN__)
-       strftime(date2, sizeof(date), "%b %d  %Y", localtime(&mtime));
-       _snprintf(date, sizeof(date)-1, "%12s file", date2);
+       strftime(date2, sizeof(date2)-1, "%b %d  %Y", localtime(&mtime));
+       _snprintf(date, sizeof(date)-1, "%12.12s file", date2);
 #else
-       strftime(date2, sizeof(date), "%b %e  %Y", localtime(&mtime));
-       snprintf(date, sizeof(date)-1, "%12s file", date2);
+       strftime(date2, sizeof(date2)-1, "%b %e  %Y", localtime(&mtime));
+       snprintf(date, sizeof(date)-1, "%12.12s file", date2);
 #endif
        assertEqualMem(p + 42, date, strlen(date));
        free(p);

Modified: vendor/libarchive/dist/libarchive/CMakeLists.txt
==============================================================================
--- vendor/libarchive/dist/libarchive/CMakeLists.txt    Tue Feb 12 21:23:59 
2019        (r344062)
+++ vendor/libarchive/dist/libarchive/CMakeLists.txt    Tue Feb 12 22:29:41 
2019        (r344063)
@@ -51,6 +51,8 @@ SET(libarchive_SOURCES
   archive_platform_acl.h
   archive_platform_xattr.h
   archive_ppmd_private.h
+  archive_ppmd8.c
+  archive_ppmd8_private.h
   archive_ppmd7.c
   archive_ppmd7_private.h
   archive_private.h

Modified: vendor/libarchive/dist/libarchive/archive_acl.c
==============================================================================
--- vendor/libarchive/dist/libarchive/archive_acl.c     Tue Feb 12 21:23:59 
2019        (r344062)
+++ vendor/libarchive/dist/libarchive/archive_acl.c     Tue Feb 12 22:29:41 
2019        (r344063)
@@ -138,14 +138,10 @@ archive_acl_clear(struct archive_acl *acl)
                free(acl->acl_head);
                acl->acl_head = ap;
        }
-       if (acl->acl_text_w != NULL) {
-               free(acl->acl_text_w);
-               acl->acl_text_w = NULL;
-       }
-       if (acl->acl_text != NULL) {
-               free(acl->acl_text);
-               acl->acl_text = NULL;
-       }
+       free(acl->acl_text_w);
+       acl->acl_text_w = NULL;
+       free(acl->acl_text);
+       acl->acl_text = NULL;
        acl->acl_p = NULL;
        acl->acl_types = 0;
        acl->acl_state = 0; /* Not counting. */
@@ -324,14 +320,10 @@ acl_new_entry(struct archive_acl *acl,
                return (NULL);
        }
 
-       if (acl->acl_text_w != NULL) {
-               free(acl->acl_text_w);
-               acl->acl_text_w = NULL;
-       }
-       if (acl->acl_text != NULL) {
-               free(acl->acl_text);
-               acl->acl_text = NULL;
-       }
+       free(acl->acl_text_w);
+       acl->acl_text_w = NULL;
+       free(acl->acl_text);
+       acl->acl_text = NULL;
 
        /*
         * If there's a matching entry already in the list, overwrite it.

Modified: vendor/libarchive/dist/libarchive/archive_disk_acl_sunos.c
==============================================================================
--- vendor/libarchive/dist/libarchive/archive_disk_acl_sunos.c  Tue Feb 12 
21:23:59 2019        (r344062)
+++ vendor/libarchive/dist/libarchive/archive_disk_acl_sunos.c  Tue Feb 12 
22:29:41 2019        (r344063)
@@ -145,10 +145,8 @@ sunacl_get(int cmd, int *aclcnt, int fd, const char *p
                                        cnt = facl(fd, cmd, cnt, aclp);
                        }
                } else {
-                       if (aclp != NULL) {
-                               free(aclp);
-                               aclp = NULL;
-                       }
+                       free(aclp);
+                       aclp = NULL;
                        break;
                }
        }

Modified: vendor/libarchive/dist/libarchive/archive_entry.c
==============================================================================
--- vendor/libarchive/dist/libarchive/archive_entry.c   Tue Feb 12 21:23:59 
2019        (r344062)
+++ vendor/libarchive/dist/libarchive/archive_entry.c   Tue Feb 12 22:29:41 
2019        (r344063)
@@ -1560,10 +1560,8 @@ archive_entry_acl_text_compat(int *flags)
 const wchar_t *
 archive_entry_acl_text_w(struct archive_entry *entry, int flags)
 {
-       if (entry->acl.acl_text_w != NULL) {
-               free(entry->acl.acl_text_w);
-               entry->acl.acl_text_w = NULL;
-       }
+       free(entry->acl.acl_text_w);
+       entry->acl.acl_text_w = NULL;
        if (archive_entry_acl_text_compat(&flags) == 0)
                entry->acl.acl_text_w = archive_acl_to_text_w(&entry->acl,
                    NULL, flags, entry->archive);
@@ -1574,10 +1572,8 @@ archive_entry_acl_text_w(struct archive_entry *entry, 
 const char *
 archive_entry_acl_text(struct archive_entry *entry, int flags)
 {
-       if (entry->acl.acl_text != NULL) {
-               free(entry->acl.acl_text);
-               entry->acl.acl_text = NULL;
-       }
+       free(entry->acl.acl_text);
+       entry->acl.acl_text = NULL;
        if (archive_entry_acl_text_compat(&flags) == 0)
                entry->acl.acl_text = archive_acl_to_text_l(&entry->acl, NULL,
                    flags, NULL);
@@ -1590,10 +1586,8 @@ int
 _archive_entry_acl_text_l(struct archive_entry *entry, int flags,
     const char **acl_text, size_t *len, struct archive_string_conv *sc)
 {
-       if (entry->acl.acl_text != NULL) {
-               free(entry->acl.acl_text);
-               entry->acl.acl_text = NULL;
-        }
+       free(entry->acl.acl_text);
+       entry->acl.acl_text = NULL;
 
        if (archive_entry_acl_text_compat(&flags) == 0)
                entry->acl.acl_text = archive_acl_to_text_l(&entry->acl,

Modified: vendor/libarchive/dist/libarchive/archive_pack_dev.c
==============================================================================
--- vendor/libarchive/dist/libarchive/archive_pack_dev.c        Tue Feb 12 
21:23:59 2019        (r344062)
+++ vendor/libarchive/dist/libarchive/archive_pack_dev.c        Tue Feb 12 
22:29:41 2019        (r344063)
@@ -60,6 +60,9 @@ __RCSID("$NetBSD$");
 #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

Added: vendor/libarchive/dist/libarchive/archive_ppmd8.c
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ vendor/libarchive/dist/libarchive/archive_ppmd8.c   Tue Feb 12 22:29:41 
2019        (r344063)
@@ -0,0 +1,1287 @@
+/* Ppmd8.c -- PPMdI codec
+2016-05-21 : Igor Pavlov : Public domain
+This code is based on PPMd var.I (2002): Dmitry Shkarin : Public domain */
+
+#include "archive_platform.h"
+
+#include <string.h>
+
+#include "archive_ppmd8_private.h"
+
+const Byte PPMD8_kExpEscape[16] = { 25, 14, 9, 7, 5, 5, 4, 4, 4, 3, 3, 3, 2, 
2, 2, 2 };
+static const UInt16 kInitBinEsc[] = { 0x3CDD, 0x1F3F, 0x59BF, 0x48F3, 0x64A1, 
0x5ABC, 0x6632, 0x6051};
+
+#define MAX_FREQ 124
+#define UNIT_SIZE 12
+
+#define U2B(nu) ((UInt32)(nu) * UNIT_SIZE)
+#define U2I(nu) (p->Units2Indx[(nu) - 1])
+#define I2U(indx) (p->Indx2Units[indx])
+
+#ifdef PPMD_32BIT
+  #define REF(ptr) (ptr)
+#else
+  #define REF(ptr) ((UInt32)((Byte *)(ptr) - (p)->Base))
+#endif
+
+#define STATS_REF(ptr) ((CPpmd_State_Ref)REF(ptr))
+
+#define CTX(ref) ((CPpmd8_Context *)Ppmd8_GetContext(p, ref))
+#define STATS(ctx) Ppmd8_GetStats(p, ctx)
+#define ONE_STATE(ctx) Ppmd8Context_OneState(ctx)
+#define SUFFIX(ctx) CTX((ctx)->Suffix)
+
+#define kTop (1 << 24)
+#define kBot (1 << 15)
+
+typedef CPpmd8_Context * CTX_PTR;
+
+struct CPpmd8_Node_;
+
+typedef
+  #ifdef PPMD_32BIT
+    struct CPpmd8_Node_ *
+  #else
+    UInt32
+  #endif
+  CPpmd8_Node_Ref;
+
+typedef struct CPpmd8_Node_
+{
+  UInt32 Stamp;
+  CPpmd8_Node_Ref Next;
+  UInt32 NU;
+} CPpmd8_Node;
+
+#ifdef PPMD_32BIT
+  #define NODE(ptr) (ptr)
+#else
+  #define NODE(offs) ((CPpmd8_Node *)(p->Base + (offs)))
+#endif
+
+#define EMPTY_NODE 0xFFFFFFFF
+
+void Ppmd8_Construct(CPpmd8 *p)
+{
+  unsigned i, k, m;
+
+  p->Base = 0;
+
+  for (i = 0, k = 0; i < PPMD_NUM_INDEXES; i++)
+  {
+    unsigned step = (i >= 12 ? 4 : (i >> 2) + 1);
+    do { p->Units2Indx[k++] = (Byte)i; } while (--step);
+    p->Indx2Units[i] = (Byte)k;
+  }
+
+  p->NS2BSIndx[0] = (0 << 1);
+  p->NS2BSIndx[1] = (1 << 1);
+  memset(p->NS2BSIndx + 2, (2 << 1), 9);
+  memset(p->NS2BSIndx + 11, (3 << 1), 256 - 11);
+
+  for (i = 0; i < 5; i++)
+    p->NS2Indx[i] = (Byte)i;
+  for (m = i, k = 1; i < 260; i++)
+  {
+    p->NS2Indx[i] = (Byte)m;
+    if (--k == 0)
+      k = (++m) - 4;
+  }
+}
+
+void Ppmd8_Free(CPpmd8 *p)
+{
+  free(p->Base);
+  p->Size = 0;
+  p->Base = 0;
+}
+
+Bool Ppmd8_Alloc(CPpmd8 *p, UInt32 size)
+{
+  if (p->Base == 0 || p->Size != size)
+  {
+    Ppmd8_Free(p);
+    p->AlignOffset =
+      #ifdef PPMD_32BIT
+        (4 - size) & 3;
+      #else
+        4 - (size & 3);
+      #endif
+    if ((p->Base = (Byte *)malloc(p->AlignOffset + size)) == 0)
+      return False;
+    p->Size = size;
+  }
+  return True;
+}
+
+static void InsertNode(CPpmd8 *p, void *node, unsigned indx)
+{
+  ((CPpmd8_Node *)node)->Stamp = EMPTY_NODE;
+  ((CPpmd8_Node *)node)->Next = (CPpmd8_Node_Ref)p->FreeList[indx];
+  ((CPpmd8_Node *)node)->NU = I2U(indx);
+  p->FreeList[indx] = REF(node);
+  p->Stamps[indx]++;
+}
+
+static void *RemoveNode(CPpmd8 *p, unsigned indx)
+{
+  CPpmd8_Node *node = NODE((CPpmd8_Node_Ref)p->FreeList[indx]);
+  p->FreeList[indx] = node->Next;
+  p->Stamps[indx]--;
+  return node;
+}
+
+static void SplitBlock(CPpmd8 *p, void *ptr, unsigned oldIndx, unsigned 
newIndx)
+{
+  unsigned i, nu = I2U(oldIndx) - I2U(newIndx);
+  ptr = (Byte *)ptr + U2B(I2U(newIndx));
+  if (I2U(i = U2I(nu)) != nu)
+  {
+    unsigned k = I2U(--i);
+    InsertNode(p, ((Byte *)ptr) + U2B(k), nu - k - 1);
+  }
+  InsertNode(p, ptr, i);
+}
+
+static void GlueFreeBlocks(CPpmd8 *p)
+{
+  CPpmd8_Node_Ref head = 0;
+  CPpmd8_Node_Ref *prev = &head;
+  unsigned i;
+
+  p->GlueCount = 1 << 13;
+  memset(p->Stamps, 0, sizeof(p->Stamps));
+  
+  /* Order-0 context is always at top UNIT, so we don't need guard NODE at the 
end.
+     All blocks up to p->LoUnit can be free, so we need guard NODE at LoUnit. 
*/
+  if (p->LoUnit != p->HiUnit)
+    ((CPpmd8_Node *)p->LoUnit)->Stamp = 0;
+
+  /* Glue free blocks */
+  for (i = 0; i < PPMD_NUM_INDEXES; i++)
+  {
+    CPpmd8_Node_Ref next = (CPpmd8_Node_Ref)p->FreeList[i];
+    p->FreeList[i] = 0;
+    while (next != 0)
+    {
+      CPpmd8_Node *node = NODE(next);
+      if (node->NU != 0)
+      {
+        CPpmd8_Node *node2;
+        *prev = next;
+        prev = &(node->Next);
+        while ((node2 = node + node->NU)->Stamp == EMPTY_NODE)
+        {
+          node->NU += node2->NU;
+          node2->NU = 0;
+        }
+      }
+      next = node->Next;
+    }
+  }
+  *prev = 0;
+  
+  /* Fill lists of free blocks */
+  while (head != 0)
+  {
+    CPpmd8_Node *node = NODE(head);
+    unsigned nu;
+    head = node->Next;
+    nu = node->NU;
+    if (nu == 0)
+      continue;
+    for (; nu > 128; nu -= 128, node += 128)
+      InsertNode(p, node, PPMD_NUM_INDEXES - 1);
+    if (I2U(i = U2I(nu)) != nu)
+    {
+      unsigned k = I2U(--i);
+      InsertNode(p, node + k, nu - k - 1);
+    }
+    InsertNode(p, node, i);
+  }
+}
+
+static void *AllocUnitsRare(CPpmd8 *p, unsigned indx)
+{
+  unsigned i;
+  void *retVal;
+  if (p->GlueCount == 0)
+  {
+    GlueFreeBlocks(p);
+    if (p->FreeList[indx] != 0)
+      return RemoveNode(p, indx);
+  }
+  i = indx;
+  do
+  {
+    if (++i == PPMD_NUM_INDEXES)
+    {
+      UInt32 numBytes = U2B(I2U(indx));
+      p->GlueCount--;
+      return ((UInt32)(p->UnitsStart - p->Text) > numBytes) ? (p->UnitsStart 
-= numBytes) : (NULL);
+    }
+  }
+  while (p->FreeList[i] == 0);
+  retVal = RemoveNode(p, i);
+  SplitBlock(p, retVal, i, indx);
+  return retVal;
+}
+
+static void *AllocUnits(CPpmd8 *p, unsigned indx)
+{
+  UInt32 numBytes;
+  if (p->FreeList[indx] != 0)
+    return RemoveNode(p, indx);
+  numBytes = U2B(I2U(indx));
+  if (numBytes <= (UInt32)(p->HiUnit - p->LoUnit))
+  {
+    void *retVal = p->LoUnit;
+    p->LoUnit += numBytes;
+    return retVal;
+  }
+  return AllocUnitsRare(p, indx);
+}
+
+#define MyMem12Cpy(dest, src, num) \
+  { UInt32 *d = (UInt32 *)dest; const UInt32 *z = (const UInt32 *)src; UInt32 
n = num; \
+    do { d[0] = z[0]; d[1] = z[1]; d[2] = z[2]; z += 3; d += 3; } while (--n); 
}
+
+static void *ShrinkUnits(CPpmd8 *p, void *oldPtr, unsigned oldNU, unsigned 
newNU)
+{
+  unsigned i0 = U2I(oldNU);
+  unsigned i1 = U2I(newNU);
+  if (i0 == i1)
+    return oldPtr;
+  if (p->FreeList[i1] != 0)
+  {
+    void *ptr = RemoveNode(p, i1);
+    MyMem12Cpy(ptr, oldPtr, newNU);
+    InsertNode(p, oldPtr, i0);
+    return ptr;
+  }
+  SplitBlock(p, oldPtr, i0, i1);
+  return oldPtr;
+}
+
+static void FreeUnits(CPpmd8 *p, void *ptr, unsigned nu)
+{
+  InsertNode(p, ptr, U2I(nu));
+}
+
+static void SpecialFreeUnit(CPpmd8 *p, void *ptr)
+{
+  if ((Byte *)ptr != p->UnitsStart)
+    InsertNode(p, ptr, 0);
+  else
+  {
+    #ifdef PPMD8_FREEZE_SUPPORT
+    *(UInt32 *)ptr = EMPTY_NODE; /* it's used for (Flags == 0xFF) check in 
RemoveBinContexts */
+    #endif
+    p->UnitsStart += UNIT_SIZE;
+  }
+}
+
+static void *MoveUnitsUp(CPpmd8 *p, void *oldPtr, unsigned nu)
+{
+  unsigned indx = U2I(nu);
+  void *ptr;
+  if ((Byte *)oldPtr > p->UnitsStart + 16 * 1024 || REF(oldPtr) > 
p->FreeList[indx])
+    return oldPtr;
+  ptr = RemoveNode(p, indx);
+  MyMem12Cpy(ptr, oldPtr, nu);
+  if ((Byte*)oldPtr != p->UnitsStart)
+    InsertNode(p, oldPtr, indx);
+  else
+    p->UnitsStart += U2B(I2U(indx));
+  return ptr;
+}
+
+static void ExpandTextArea(CPpmd8 *p)
+{
+  UInt32 count[PPMD_NUM_INDEXES];
+  unsigned i;
+  memset(count, 0, sizeof(count));
+  if (p->LoUnit != p->HiUnit)
+    ((CPpmd8_Node *)p->LoUnit)->Stamp = 0;
+  
+  {
+    CPpmd8_Node *node = (CPpmd8_Node *)p->UnitsStart;
+    for (; node->Stamp == EMPTY_NODE; node += node->NU)
+    {
+      node->Stamp = 0;
+      count[U2I(node->NU)]++;
+    }
+    p->UnitsStart = (Byte *)node;
+  }
+  
+  for (i = 0; i < PPMD_NUM_INDEXES; i++)
+  {
+    CPpmd8_Node_Ref *next = (CPpmd8_Node_Ref *)&p->FreeList[i];
+    while (count[i] != 0)
+    {
+      CPpmd8_Node *node = NODE(*next);
+      while (node->Stamp == 0)
+      {
+        *next = node->Next;
+        node = NODE(*next);
+        p->Stamps[i]--;
+        if (--count[i] == 0)
+          break;
+      }
+      next = &node->Next;
+    }
+  }
+}
+
+#define SUCCESSOR(p) ((CPpmd_Void_Ref)((p)->SuccessorLow | 
((UInt32)(p)->SuccessorHigh << 16)))
+
+static void SetSuccessor(CPpmd_State *p, CPpmd_Void_Ref v)
+{
+  (p)->SuccessorLow = (UInt16)((UInt32)(v) & 0xFFFF);
+  (p)->SuccessorHigh = (UInt16)(((UInt32)(v) >> 16) & 0xFFFF);
+}
+
+#define RESET_TEXT(offs) { p->Text = p->Base + p->AlignOffset + (offs); }
+
+static void RestartModel(CPpmd8 *p)
+{
+  unsigned i, k, m, r;
+
+  memset(p->FreeList, 0, sizeof(p->FreeList));
+  memset(p->Stamps, 0, sizeof(p->Stamps));
+  RESET_TEXT(0);
+  p->HiUnit = p->Text + p->Size;
+  p->LoUnit = p->UnitsStart = p->HiUnit - p->Size / 8 / UNIT_SIZE * 7 * 
UNIT_SIZE;
+  p->GlueCount = 0;
+
+  p->OrderFall = p->MaxOrder;
+  p->RunLength = p->InitRL = -(Int32)((p->MaxOrder < 12) ? p->MaxOrder : 12) - 
1;
+  p->PrevSuccess = 0;
+
+  p->MinContext = p->MaxContext = (CTX_PTR)(p->HiUnit -= UNIT_SIZE); /* 
AllocContext(p); */
+  p->MinContext->Suffix = 0;
+  p->MinContext->NumStats = 255;
+  p->MinContext->Flags = 0;
+  p->MinContext->SummFreq = 256 + 1;
+  p->FoundState = (CPpmd_State *)p->LoUnit; /* AllocUnits(p, PPMD_NUM_INDEXES 
- 1); */
+  p->LoUnit += U2B(256 / 2);
+  p->MinContext->Stats = REF(p->FoundState);
+  for (i = 0; i < 256; i++)
+  {
+    CPpmd_State *s = &p->FoundState[i];
+    s->Symbol = (Byte)i;
+    s->Freq = 1;
+    SetSuccessor(s, 0);
+  }
+
+  for (i = m = 0; m < 25; m++)
+  {
+    while (p->NS2Indx[i] == m)
+      i++;
+    for (k = 0; k < 8; k++)
+    {
+      UInt16 val = (UInt16)(PPMD_BIN_SCALE - kInitBinEsc[k] / (i + 1));
+      UInt16 *dest = p->BinSumm[m] + k;
+      for (r = 0; r < 64; r += 8)
+        dest[r] = val;
+    }
+  }
+
+  for (i = m = 0; m < 24; m++)
+  {
+    while (p->NS2Indx[i + 3] == m + 3)
+      i++;
+    for (k = 0; k < 32; k++)
+    {
+      CPpmd_See *s = &p->See[m][k];
+      s->Summ = (UInt16)((2 * i + 5) << (s->Shift = PPMD_PERIOD_BITS - 4));
+      s->Count = 7;
+    }
+  }
+}
+
+void Ppmd8_Init(CPpmd8 *p, unsigned maxOrder, unsigned restoreMethod)
+{
+  p->MaxOrder = maxOrder;
+  p->RestoreMethod = restoreMethod;
+  RestartModel(p);
+  p->DummySee.Shift = PPMD_PERIOD_BITS;
+  p->DummySee.Summ = 0; /* unused */
+  p->DummySee.Count = 64; /* unused */
+}
+
+static void Refresh(CPpmd8 *p, CTX_PTR ctx, unsigned oldNU, unsigned scale)

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to