diff options
author | joerg <joerg@pkgsrc.org> | 2016-06-21 13:39:21 +0000 |
---|---|---|
committer | joerg <joerg@pkgsrc.org> | 2016-06-21 13:39:21 +0000 |
commit | 8dcbbec9420671c10fa27cb1fe5a5cf175b6b1bd (patch) | |
tree | 91d308d18fb3c491c995c6e3eaee2b29ac8c8f2c /archivers | |
parent | 4a80ecc5e8dac6015c1e0d8f00595ce97d3619a0 (diff) | |
download | pkgsrc-8dcbbec9420671c10fa27cb1fe5a5cf175b6b1bd.tar.gz |
libarchive-3.2.1nb1: Merge a number of bugfixes from upstream
(1) ctype misuse
(2) Don't depend on SIGRTMAX
(3) Link against libcrypto when using it for EVP support
Diffstat (limited to 'archivers')
6 files changed, 83 insertions, 27 deletions
diff --git a/archivers/libarchive/Makefile b/archivers/libarchive/Makefile index 08a42068acf..9a84b1cf226 100644 --- a/archivers/libarchive/Makefile +++ b/archivers/libarchive/Makefile @@ -1,7 +1,8 @@ -# $NetBSD: Makefile,v 1.43 2016/06/20 17:28:33 joerg Exp $ +# $NetBSD: Makefile,v 1.44 2016/06/21 13:39:21 joerg Exp $ .include "Makefile.common" +PKGREVISION= 1 COMMENT= Library to read/create different archive formats USE_LIBTOOL= yes diff --git a/archivers/libarchive/files/configure b/archivers/libarchive/files/configure index 5138c311b70..bb491e66d37 100755 --- a/archivers/libarchive/files/configure +++ b/archivers/libarchive/files/configure @@ -14748,9 +14748,6 @@ else /* end confdefs.h. */ #include <lzma.h> - #if LZMA_VERSION < 50020000 - #error unsupported - #endif int main () { @@ -14759,13 +14756,12 @@ lzma_stream_encoder_mt(0, 0); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_lzma_has_mt=yes else ac_cv_lzma_has_mt=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lzma_has_mt" >&5 $as_echo "$ac_cv_lzma_has_mt" >&6; } @@ -19483,6 +19479,51 @@ fi done fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EVP_CIPHER_CTX_init in -lcrypto" >&5 +$as_echo_n "checking for EVP_CIPHER_CTX_init in -lcrypto... " >&6; } +if ${ac_cv_lib_crypto_EVP_CIPHER_CTX_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcrypto $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char EVP_CIPHER_CTX_init (); +int +main () +{ +return EVP_CIPHER_CTX_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_crypto_EVP_CIPHER_CTX_init=yes +else + ac_cv_lib_crypto_EVP_CIPHER_CTX_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_EVP_CIPHER_CTX_init" >&5 +$as_echo "$ac_cv_lib_crypto_EVP_CIPHER_CTX_init" >&6; } +if test "x$ac_cv_lib_crypto_EVP_CIPHER_CTX_init" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBCRYPTO 1 +_ACEOF + + LIBS="-lcrypto $LIBS" + +fi + fi # Probe libmd AFTER OpenSSL/libcrypto. diff --git a/archivers/libarchive/files/configure.ac b/archivers/libarchive/files/configure.ac index 71469e6ee31..64775fa6382 100644 --- a/archivers/libarchive/files/configure.ac +++ b/archivers/libarchive/files/configure.ac @@ -374,11 +374,8 @@ if test "x$with_lzma" != "xno"; then AC_CACHE_CHECK( [whether we have multithread support in lzma], ac_cv_lzma_has_mt, - [AC_LINK_IFELSE([ - AC_LANG_PROGRAM([[#include <lzma.h>] - [#if LZMA_VERSION < 50020000] - [#error unsupported] - [#endif]], + [AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[#include <lzma.h>]], [[lzma_stream_encoder_mt(0, 0);]])], [ac_cv_lzma_has_mt=yes], [ac_cv_lzma_has_mt=no])]) if test "x$ac_cv_lzma_has_mt" != xno; then @@ -849,6 +846,7 @@ if test "x$with_openssl" != "xno"; then else AC_CHECK_FUNCS([PKCS5_PBKDF2_HMAC_SHA1]) fi + AC_CHECK_LIB(crypto,EVP_CIPHER_CTX_init) fi # Probe libmd AFTER OpenSSL/libcrypto. diff --git a/archivers/libarchive/files/libarchive/archive_read_support_format_lha.c b/archivers/libarchive/files/libarchive/archive_read_support_format_lha.c index c359d83ef97..dbfc1cd87c8 100644 --- a/archivers/libarchive/files/libarchive/archive_read_support_format_lha.c +++ b/archivers/libarchive/files/libarchive/archive_read_support_format_lha.c @@ -1712,6 +1712,7 @@ lha_crc16(uint16_t crc, const void *pp, size_t len) for (;len >= 8; len -= 8) { /* This if statement expects compiler optimization will * remove the stament which will not be executed. */ +#undef bswap16 #if defined(_MSC_VER) && _MSC_VER >= 1400 /* Visual Studio */ # define bswap16(x) _byteswap_ushort(x) #elif (defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 8) \ diff --git a/archivers/libarchive/files/libarchive/archive_read_support_format_warc.c b/archivers/libarchive/files/libarchive/archive_read_support_format_warc.c index 46a59ea14ba..9d801328756 100644 --- a/archivers/libarchive/files/libarchive/archive_read_support_format_warc.c +++ b/archivers/libarchive/files/libarchive/archive_read_support_format_warc.c @@ -535,7 +535,8 @@ xstrpisotime(const char *s, char **endptr) /* as a courtesy to our callers, and since this is a non-standard * routine, we skip leading whitespace */ - for (; isspace(*s); s++); + while (isspace((unsigned char)*s)) + ++s; /* read year */ if ((tm.tm_year = strtoi_lim(s, &s, 1583, 4095)) < 0 || *s++ != '-') { @@ -639,7 +640,9 @@ _warc_rdtyp(const char *buf, size_t bsz) return WT_NONE; } /* overread whitespace */ - for (val += sizeof(_key) - 1U; val < eob && isspace(*val); val++); + val += sizeof(_key) - 1U; + while (val < eob && isspace((unsigned char)*val)) + ++val; if (val + 8U > eob) { ; @@ -676,7 +679,9 @@ _warc_rduri(const char *buf, size_t bsz) return res; } /* overread whitespace */ - for (val += sizeof(_key) - 1U; val < eob && isspace(*val); val++); + val += sizeof(_key) - 1U; + while (val < eob && isspace((unsigned char)*val)) + ++val; /* overread URL designators */ if ((uri = xmemmem(val, eob - val, "://", 3U)) == NULL) { @@ -692,7 +697,8 @@ _warc_rduri(const char *buf, size_t bsz) /* also massage eol to point to the first whitespace * after the last non-whitespace character before * the end of the line */ - for (; eol > uri && isspace(eol[-1]); eol--); + while (eol > uri && isspace((unsigned char)eol[-1])) + --eol; /* now then, inspect the URI */ if (memcmp(val, "file", 4U) == 0) { @@ -727,7 +733,7 @@ _warc_rdlen(const char *buf, size_t bsz) /* strtol kindly overreads whitespace for us, so use that */ val += sizeof(_key) - 1U; len = strtol(val, &on, 10); - if (on == NULL || !isspace(*on)) { + if (on == NULL || !isspace((unsigned char)*on)) { /* hm, can we trust that number? Best not. */ return -1; } @@ -750,7 +756,7 @@ _warc_rdrtm(const char *buf, size_t bsz) /* xstrpisotime() kindly overreads whitespace for us, so use that */ val += sizeof(_key) - 1U; res = xstrpisotime(val, &on); - if (on == NULL || !isspace(*on)) { + if (on == NULL || !isspace((unsigned char)*on)) { /* hm, can we trust that number? Best not. */ return (time_t)-1; } @@ -773,7 +779,7 @@ _warc_rdmtm(const char *buf, size_t bsz) /* xstrpisotime() kindly overreads whitespace for us, so use that */ val += sizeof(_key) - 1U; res = xstrpisotime(val, &on); - if (on == NULL || !isspace(*on)) { + if (on == NULL || !isspace((unsigned char)*on)) { /* hm, can we trust that number? Best not. */ return (time_t)-1; } diff --git a/archivers/libarchive/files/libarchive_fe/passphrase.c b/archivers/libarchive/files/libarchive_fe/passphrase.c index 1eae0b888bc..ec84591cdfa 100644 --- a/archivers/libarchive/files/libarchive_fe/passphrase.c +++ b/archivers/libarchive/files/libarchive_fe/passphrase.c @@ -121,14 +121,15 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags) #else /* _WIN32 && !__CYGWIN__ */ -#include <termios.h> -#include <signal.h> +#include <assert.h> #include <ctype.h> #include <fcntl.h> #ifdef HAVE_PATHS_H #include <paths.h> #endif +#include <signal.h> #include <string.h> +#include <termios.h> #include <unistd.h> #ifdef TCSASOFT @@ -142,11 +143,18 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags) # define _POSIX_VDISABLE VDISABLE #endif +#define M(a,b) (a > b ? a : b) +#define MAX_SIGNO M(M(M(SIGALRM, SIGHUP), \ + M(SIGINT, SIGPIPE)), \ + M(M(SIGQUIT, SIGTERM), \ + M(M(SIGTSTP, SIGTTIN), SIGTTOU))) + static volatile sig_atomic_t *signo; static void handler(int s) { + assert(s <= MAX_SIGNO); signo[s] = 1; } @@ -167,11 +175,11 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags) } if (signo == NULL) { - signo = calloc(SIGRTMAX, sizeof(sig_atomic_t)); + signo = calloc(MAX_SIGNO + 1, sizeof(sig_atomic_t)); } restart: - for (i = 0; i < SIGRTMAX; i++) + for (i = 0; i <= MAX_SIGNO; i++) signo[i] = 0; nr = -1; save_errno = 0; @@ -198,6 +206,7 @@ restart: sigemptyset(&sa.sa_mask); sa.sa_flags = 0; /* don't restart system calls */ sa.sa_handler = handler; + /* Keep this list in sync with MAX_SIGNO! */ (void)sigaction(SIGALRM, &sa, &savealrm); (void)sigaction(SIGHUP, &sa, &savehup); (void)sigaction(SIGINT, &sa, &saveint); @@ -237,11 +246,11 @@ restart: if (p < end) { if ((flags & RPP_SEVENBIT)) ch &= 0x7f; - if (isalpha(ch)) { + if (isalpha((unsigned char)ch)) { if ((flags & RPP_FORCELOWER)) - ch = (char)tolower(ch); + ch = (char)tolower((unsigned char)ch); if ((flags & RPP_FORCEUPPER)) - ch = (char)toupper(ch); + ch = (char)toupper((unsigned char)ch); } *p++ = ch; } @@ -276,7 +285,7 @@ restart: * If we were interrupted by a signal, resend it to ourselves * now that we have restored the signal handlers. */ - for (i = 0; i < SIGRTMAX; i++) { + for (i = 0; i <= MAX_SIGNO; i++) { if (signo[i]) { kill(getpid(), i); switch (i) { |