aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Matuska <mm@FreeBSD.org>2018-10-23 10:58:07 +0000
committerMartin Matuska <mm@FreeBSD.org>2018-10-23 10:58:07 +0000
commit30bb24b1cb0751cbbb2b53d60e3e4f5bdbe58abb (patch)
tree9171287ccceff48608b8bd6649eb56d020923550
parent21d41b7887a19cdbe00ce6559aafa5b111e3efe2 (diff)
downloadsrc-30bb24b1cb0751cbbb2b53d60e3e4f5bdbe58abb.tar.gz
src-30bb24b1cb0751cbbb2b53d60e3e4f5bdbe58abb.zip
Update vendor/libarchive/dist to git d5f35a90a4cb1eeb918213bff9d78e8b0471dc0a
Relevant vendor changes: PR #1013: Add missing h_base offset when performing absolute seeks in xar decompression PR #1061: Add support for extraction of RAR v5 archives PR #1066: Fix out of bounds read on empty string filename for gnutar, pax and v7tar PR #1067: Fix temporary file path buffer overflow in tests IS #1068: Correctly process and verify integer arguments passed to bsdcpio and bsdtar PR #1070: Don't default XAR entry atime/mtime to the current time
Notes
Notes: svn path=/vendor/libarchive/dist/; revision=339640
-rw-r--r--CMakeLists.txt28
-rw-r--r--COPYING9
-rw-r--r--Makefile.am8
-rw-r--r--NEWS2
-rw-r--r--README.md2
-rw-r--r--configure.ac10
-rw-r--r--cpio/cpio.c15
-rw-r--r--libarchive/CMakeLists.txt6
-rw-r--r--libarchive/archive.h2
-rw-r--r--libarchive/archive_blake2.h194
-rw-r--r--libarchive/archive_blake2_impl.h160
-rw-r--r--libarchive/archive_blake2s_ref.c367
-rw-r--r--libarchive/archive_blake2sp_ref.c359
-rw-r--r--libarchive/archive_read_support_format_all.c1
-rw-r--r--libarchive/archive_read_support_format_by_code.c3
-rw-r--r--libarchive/archive_read_support_format_rar5.c3457
-rw-r--r--libarchive/archive_read_support_format_xar.c27
-rw-r--r--libarchive/archive_write_set_format_gnutar.c2
-rw-r--r--libarchive/archive_write_set_format_pax.c2
-rw-r--r--libarchive/archive_write_set_format_v7tar.c2
-rw-r--r--libarchive/test/CMakeLists.txt1
-rw-r--r--libarchive/test/test_read_format_rar5.c728
-rw-r--r--libarchive/test/test_read_format_rar5_arm.rar.uu916
-rw-r--r--libarchive/test/test_read_format_rar5_blake2.rar.uu18
-rw-r--r--libarchive/test/test_read_format_rar5_compressed.rar.uu13
-rw-r--r--libarchive/test/test_read_format_rar5_multiarchive.part01.rar.uu345
-rw-r--r--libarchive/test/test_read_format_rar5_multiarchive.part02.rar.uu345
-rw-r--r--libarchive/test/test_read_format_rar5_multiarchive.part03.rar.uu345
-rw-r--r--libarchive/test/test_read_format_rar5_multiarchive.part04.rar.uu345
-rw-r--r--libarchive/test/test_read_format_rar5_multiarchive.part05.rar.uu345
-rw-r--r--libarchive/test/test_read_format_rar5_multiarchive.part06.rar.uu345
-rw-r--r--libarchive/test/test_read_format_rar5_multiarchive.part07.rar.uu345
-rw-r--r--libarchive/test/test_read_format_rar5_multiarchive.part08.rar.uu208
-rw-r--r--libarchive/test/test_read_format_rar5_multiarchive_solid.part01.rar.uu299
-rw-r--r--libarchive/test/test_read_format_rar5_multiarchive_solid.part02.rar.uu299
-rw-r--r--libarchive/test/test_read_format_rar5_multiarchive_solid.part03.rar.uu299
-rw-r--r--libarchive/test/test_read_format_rar5_multiarchive_solid.part04.rar.uu76
-rw-r--r--libarchive/test/test_read_format_rar5_multiple_files.rar.uu40
-rw-r--r--libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu19
-rw-r--r--libarchive/test/test_read_format_rar5_solid.rar.uu27
-rw-r--r--libarchive/test/test_read_format_rar5_stored.rar.uu6
-rw-r--r--libarchive/test/test_read_format_rar5_stored_manyfiles.rar.uu61
-rw-r--r--libarchive/test/test_read_format_rar5_win32.rar.uu68
-rw-r--r--libarchive/test/test_read_format_xar.c163
-rw-r--r--tar/bsdtar.c50
-rw-r--r--test_utils/test_main.c24
46 files changed, 10345 insertions, 41 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3141dff772f6..a5641ade2411 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -179,6 +179,7 @@ include(CTest)
OPTION(ENABLE_NETTLE "Enable use of Nettle" ON)
OPTION(ENABLE_OPENSSL "Enable use of OpenSSL" ON)
+OPTION(ENABLE_LIBB2 "Enable the use of the system LIBB2 library if found" ON)
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)
@@ -508,6 +509,33 @@ ENDIF(LZO2_FOUND)
MARK_AS_ADVANCED(CLEAR LZO2_INCLUDE_DIR)
MARK_AS_ADVANCED(CLEAR LZO2_LIBRARY)
#
+# Find libb2
+#
+IF(ENABLE_LIBB2)
+ IF (LIBB2_INCLUDE_DIR)
+ # Already in cache, be silent
+ SET(LIBB2_FIND_QUIETLY TRUE)
+ ENDIF (LIBB2_INCLUDE_DIR)
+
+ FIND_PATH(LIBB2_INCLUDE_DIR blake2.h)
+ FIND_LIBRARY(LIBB2_LIBRARY NAMES b2 libb2)
+ INCLUDE(FindPackageHandleStandardArgs)
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBB2 DEFAULT_MSG LIBB2_LIBRARY LIBB2_INCLUDE_DIR)
+ELSE(ENABLE_LIBB2)
+ SET(LIBB2_FOUND FALSE) # Override cached value
+ENDIF(ENABLE_LIBB2)
+IF(LIBB2_FOUND)
+ SET(HAVE_LIBB2 1)
+ SET(HAVE_BLAKE2_H 1)
+ SET(ARCHIVE_BLAKE2 FALSE)
+ LIST(APPEND ADDITIONAL_LIBS ${LIBB2_LIBRARY})
+ SET(CMAKE_REQUIRED_LIBRARIES ${LIBB2_LIBRARY})
+ SET(CMAKE_REQUIRED_INCLUDES ${LIBB2_INCLUDE_DIR})
+ CHECK_FUNCTION_EXISTS(blake2sp_init HAVE_LIBB2)
+ELSE(LIBB2_FOUND)
+ SET(ARCHIVE_BLAKE2 TRUE)
+ENDIF(LIBB2_FOUND)
+#
# Find LZ4
#
IF(ENABLE_LZ4)
diff --git a/COPYING b/COPYING
index 93952b77ae25..14bbefa0d5a0 100644
--- a/COPYING
+++ b/COPYING
@@ -23,6 +23,13 @@ the actual statements in the files are controlling.
* The following source files are in the public domain:
libarchive/archive_getdate.c
+* The following source files are triple-licensed with the ability to choose
+ from CC0 1.0 Universal, OpenSSL or Apache 2.0 licenses:
+ libarchive/archive_blake2.h
+ libarchive/archive_blake2_impl.h
+ libarchive/archive_blake2s_ref.c
+ libarchive/archive_blake2sp_ref.c
+
* The build files---including Makefiles, configure scripts,
and auxiliary scripts used as part of the compile process---have
widely varying licensing terms. Please check individual files before
@@ -34,7 +41,7 @@ do use the license below. The varying licensing of the build scripts
seems to be an unavoidable mess.
-Copyright (c) 2003-2009 <author(s)>
+Copyright (c) 2003-2018 <author(s)>
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/Makefile.am b/Makefile.am
index 2c3ce999ee7b..80a4e17d1b71 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -179,6 +179,7 @@ libarchive_la_SOURCES= \
libarchive/archive_read_support_format_lha.c \
libarchive/archive_read_support_format_mtree.c \
libarchive/archive_read_support_format_rar.c \
+ libarchive/archive_read_support_format_rar5.c \
libarchive/archive_read_support_format_raw.c \
libarchive/archive_read_support_format_tar.c \
libarchive/archive_read_support_format_warc.c \
@@ -251,6 +252,12 @@ libarchive_la_SOURCES+= \
libarchive/filter_fork_windows.c
endif
+if INC_BLAKE2
+libarchive_la_SOURCES+= \
+ libarchive/archive_blake2s_ref.c \
+ libarchive/archive_blake2sp_ref.c
+endif
+
if INC_LINUX_ACL
libarchive_la_SOURCES+= libarchive/archive_disk_acl_linux.c
else
@@ -485,6 +492,7 @@ libarchive_test_SOURCES= \
libarchive/test/test_read_format_rar_encryption_partially.c \
libarchive/test/test_read_format_rar_encryption_header.c \
libarchive/test/test_read_format_rar_invalid1.c \
+ libarchive/test/test_read_format_rar5.c \
libarchive/test/test_read_format_raw.c \
libarchive/test/test_read_format_tar.c \
libarchive/test/test_read_format_tar_concatenated.c \
diff --git a/NEWS b/NEWS
index 45b40b499a69..5d782e6fc356 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,5 @@
+Oct 06, 2018: RAR 5.0 reader
+
Sep 03, 2018: libarchive 3.3.3 released
Jul 19, 2018: Avoid super-linear slowdown on malformed mtree files
diff --git a/README.md b/README.md
index 1a127bbb2653..df19125f9030 100644
--- a/README.md
+++ b/README.md
@@ -86,7 +86,7 @@ Currently, the library automatically detects and reads the following fomats:
* 7-Zip archives
* Microsoft CAB format
* LHA and LZH archives
- * RAR archives (with some limitations due to RAR's proprietary status)
+ * RAR and RAR 5.0 archives (with some limitations due to RAR's proprietary status)
* XAR archives
The library also detects and handles any of the following before evaluating the archive:
diff --git a/configure.ac b/configure.ac
index 17d6641888bf..64f77a673682 100644
--- a/configure.ac
+++ b/configure.ac
@@ -340,6 +340,16 @@ if test "x$with_bz2lib" != "xno"; then
esac
fi
+AC_ARG_WITH([libb2],
+ AS_HELP_STRING([--without-libb2], [Don't build support for BLAKE2 through libb2]))
+
+if test "x$with_libb2" != "xno"; then
+ AC_CHECK_HEADERS([blake2.h])
+ AC_CHECK_LIB(b2,blake2sp_init)
+fi
+
+AM_CONDITIONAL([INC_BLAKE2], [test "x$ac_cv_lib_b2_blake2sp_init" != "xyes"])
+
AC_ARG_WITH([iconv],
AS_HELP_STRING([--without-iconv], [Don't try to link against iconv]))
diff --git a/cpio/cpio.c b/cpio/cpio.c
index 4b8ce79296f0..9dddf417a5a5 100644
--- a/cpio/cpio.c
+++ b/cpio/cpio.c
@@ -134,8 +134,9 @@ main(int argc, char *argv[])
struct cpio _cpio; /* Allocated on stack. */
struct cpio *cpio;
const char *errmsg;
+ char *tptr;
int uid, gid;
- int opt;
+ int opt, t;
cpio = &_cpio;
memset(cpio, 0, sizeof(*cpio));
@@ -204,9 +205,15 @@ main(int argc, char *argv[])
cpio->add_filter = opt;
break;
case 'C': /* NetBSD/OpenBSD */
- cpio->bytes_per_block = atoi(cpio->argument);
- if (cpio->bytes_per_block <= 0)
- lafe_errc(1, 0, "Invalid blocksize %s", cpio->argument);
+ errno = 0;
+ tptr = NULL;
+ t = (int)strtol(cpio->argument, &tptr, 10);
+ if (errno || t <= 0 || *(cpio->argument) == '\0' ||
+ tptr == NULL || *tptr != '\0') {
+ lafe_errc(1, 0, "Invalid blocksize: %s",
+ cpio->argument);
+ }
+ cpio->bytes_per_block = t;
break;
case 'c': /* POSIX 1997 */
cpio->format = "odc";
diff --git a/libarchive/CMakeLists.txt b/libarchive/CMakeLists.txt
index 82dd56c9d7d6..79719773cd50 100644
--- a/libarchive/CMakeLists.txt
+++ b/libarchive/CMakeLists.txt
@@ -100,6 +100,7 @@ SET(libarchive_SOURCES
archive_read_support_format_lha.c
archive_read_support_format_mtree.c
archive_read_support_format_rar.c
+ archive_read_support_format_rar5.c
archive_read_support_format_raw.c
archive_read_support_format_tar.c
archive_read_support_format_warc.c
@@ -215,6 +216,11 @@ IF(WIN32 AND NOT CYGWIN)
LIST(APPEND libarchive_SOURCES filter_fork_windows.c)
ENDIF(WIN32 AND NOT CYGWIN)
+IF(ARCHIVE_BLAKE2)
+ LIST(APPEND libarchive_SOURCES archive_blake2sp_ref.c)
+ LIST(APPEND libarchive_SOURCES archive_blake2s_ref.c)
+ENDIF(ARCHIVE_BLAKE2)
+
IF(ARCHIVE_ACL_DARWIN)
LIST(APPEND libarchive_SOURCES archive_disk_acl_darwin.c)
ELSEIF(ARCHIVE_ACL_FREEBSD)
diff --git a/libarchive/archive.h b/libarchive/archive.h
index cd65cd284b62..438ce4680a9e 100644
--- a/libarchive/archive.h
+++ b/libarchive/archive.h
@@ -338,6 +338,7 @@ typedef const char *archive_passphrase_callback(struct archive *,
#define ARCHIVE_FORMAT_LHA 0xB0000
#define ARCHIVE_FORMAT_CAB 0xC0000
#define ARCHIVE_FORMAT_RAR 0xD0000
+#define ARCHIVE_FORMAT_RAR_V5 (ARCHIVE_FORMAT_RAR | 1)
#define ARCHIVE_FORMAT_7ZIP 0xE0000
#define ARCHIVE_FORMAT_WARC 0xF0000
@@ -449,6 +450,7 @@ __LA_DECL int archive_read_support_format_iso9660(struct archive *);
__LA_DECL int archive_read_support_format_lha(struct archive *);
__LA_DECL int archive_read_support_format_mtree(struct archive *);
__LA_DECL int archive_read_support_format_rar(struct archive *);
+__LA_DECL int archive_read_support_format_rar5(struct archive *);
__LA_DECL int archive_read_support_format_raw(struct archive *);
__LA_DECL int archive_read_support_format_tar(struct archive *);
__LA_DECL int archive_read_support_format_warc(struct archive *);
diff --git a/libarchive/archive_blake2.h b/libarchive/archive_blake2.h
new file mode 100644
index 000000000000..337be194654e
--- /dev/null
+++ b/libarchive/archive_blake2.h
@@ -0,0 +1,194 @@
+/*
+ BLAKE2 reference source code package - reference C implementations
+
+ Copyright 2012, Samuel Neves <sneves@dei.uc.pt>. You may use this under the
+ terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at
+ your option. The terms of these licenses can be found at:
+
+ - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
+ - OpenSSL license : https://www.openssl.org/source/license.html
+ - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0
+
+ More information about the BLAKE2 hash function can be found at
+ https://blake2.net.
+*/
+#ifndef BLAKE2_H
+#define BLAKE2_H
+
+#include <stddef.h>
+#include <stdint.h>
+
+#if defined(_MSC_VER)
+#define BLAKE2_PACKED(x) __pragma(pack(push, 1)) x __pragma(pack(pop))
+#else
+#define BLAKE2_PACKED(x) x __attribute__((packed))
+#endif
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+ enum blake2s_constant
+ {
+ BLAKE2S_BLOCKBYTES = 64,
+ BLAKE2S_OUTBYTES = 32,
+ BLAKE2S_KEYBYTES = 32,
+ BLAKE2S_SALTBYTES = 8,
+ BLAKE2S_PERSONALBYTES = 8
+ };
+
+ enum blake2b_constant
+ {
+ BLAKE2B_BLOCKBYTES = 128,
+ BLAKE2B_OUTBYTES = 64,
+ BLAKE2B_KEYBYTES = 64,
+ BLAKE2B_SALTBYTES = 16,
+ BLAKE2B_PERSONALBYTES = 16
+ };
+
+ typedef struct blake2s_state__
+ {
+ uint32_t h[8];
+ uint32_t t[2];
+ uint32_t f[2];
+ uint8_t buf[BLAKE2S_BLOCKBYTES];
+ size_t buflen;
+ size_t outlen;
+ uint8_t last_node;
+ } blake2s_state;
+
+ typedef struct blake2b_state__
+ {
+ uint64_t h[8];
+ uint64_t t[2];
+ uint64_t f[2];
+ uint8_t buf[BLAKE2B_BLOCKBYTES];
+ size_t buflen;
+ size_t outlen;
+ uint8_t last_node;
+ } blake2b_state;
+
+ typedef struct blake2sp_state__
+ {
+ blake2s_state S[8][1];
+ blake2s_state R[1];
+ uint8_t buf[8 * BLAKE2S_BLOCKBYTES];
+ size_t buflen;
+ size_t outlen;
+ } blake2sp_state;
+
+ typedef struct blake2bp_state__
+ {
+ blake2b_state S[4][1];
+ blake2b_state R[1];
+ uint8_t buf[4 * BLAKE2B_BLOCKBYTES];
+ size_t buflen;
+ size_t outlen;
+ } blake2bp_state;
+
+ BLAKE2_PACKED(struct blake2s_param__
+ {
+ uint8_t digest_length; /* 1 */
+ uint8_t key_length; /* 2 */
+ uint8_t fanout; /* 3 */
+ uint8_t depth; /* 4 */
+ uint32_t leaf_length; /* 8 */
+ uint32_t node_offset; /* 12 */
+ uint16_t xof_length; /* 14 */
+ uint8_t node_depth; /* 15 */
+ uint8_t inner_length; /* 16 */
+ /* uint8_t reserved[0]; */
+ uint8_t salt[BLAKE2S_SALTBYTES]; /* 24 */
+ uint8_t personal[BLAKE2S_PERSONALBYTES]; /* 32 */
+ });
+
+ typedef struct blake2s_param__ blake2s_param;
+
+ BLAKE2_PACKED(struct blake2b_param__
+ {
+ uint8_t digest_length; /* 1 */
+ uint8_t key_length; /* 2 */
+ uint8_t fanout; /* 3 */
+ uint8_t depth; /* 4 */
+ uint32_t leaf_length; /* 8 */
+ uint32_t node_offset; /* 12 */
+ uint32_t xof_length; /* 16 */
+ uint8_t node_depth; /* 17 */
+ uint8_t inner_length; /* 18 */
+ uint8_t reserved[14]; /* 32 */
+ uint8_t salt[BLAKE2B_SALTBYTES]; /* 48 */
+ uint8_t personal[BLAKE2B_PERSONALBYTES]; /* 64 */
+ });
+
+ typedef struct blake2b_param__ blake2b_param;
+
+ typedef struct blake2xs_state__
+ {
+ blake2s_state S[1];
+ blake2s_param P[1];
+ } blake2xs_state;
+
+ typedef struct blake2xb_state__
+ {
+ blake2b_state S[1];
+ blake2b_param P[1];
+ } blake2xb_state;
+
+ /* Padded structs result in a compile-time error */
+ enum {
+ BLAKE2_DUMMY_1 = 1/(sizeof(blake2s_param) == BLAKE2S_OUTBYTES),
+ BLAKE2_DUMMY_2 = 1/(sizeof(blake2b_param) == BLAKE2B_OUTBYTES)
+ };
+
+ /* Streaming API */
+ int blake2s_init( blake2s_state *S, size_t outlen );
+ int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen );
+ int blake2s_init_param( blake2s_state *S, const blake2s_param *P );
+ int blake2s_update( blake2s_state *S, const void *in, size_t inlen );
+ int blake2s_final( blake2s_state *S, void *out, size_t outlen );
+
+ int blake2b_init( blake2b_state *S, size_t outlen );
+ int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen );
+ int blake2b_init_param( blake2b_state *S, const blake2b_param *P );
+ int blake2b_update( blake2b_state *S, const void *in, size_t inlen );
+ int blake2b_final( blake2b_state *S, void *out, size_t outlen );
+
+ int blake2sp_init( blake2sp_state *S, size_t outlen );
+ int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen );
+ int blake2sp_update( blake2sp_state *S, const void *in, size_t inlen );
+ int blake2sp_final( blake2sp_state *S, void *out, size_t outlen );
+
+ int blake2bp_init( blake2bp_state *S, size_t outlen );
+ int blake2bp_init_key( blake2bp_state *S, size_t outlen, const void *key, size_t keylen );
+ int blake2bp_update( blake2bp_state *S, const void *in, size_t inlen );
+ int blake2bp_final( blake2bp_state *S, void *out, size_t outlen );
+
+ /* Variable output length API */
+ int blake2xs_init( blake2xs_state *S, const size_t outlen );
+ int blake2xs_init_key( blake2xs_state *S, const size_t outlen, const void *key, size_t keylen );
+ int blake2xs_update( blake2xs_state *S, const void *in, size_t inlen );
+ int blake2xs_final(blake2xs_state *S, void *out, size_t outlen);
+
+ int blake2xb_init( blake2xb_state *S, const size_t outlen );
+ int blake2xb_init_key( blake2xb_state *S, const size_t outlen, const void *key, size_t keylen );
+ int blake2xb_update( blake2xb_state *S, const void *in, size_t inlen );
+ int blake2xb_final(blake2xb_state *S, void *out, size_t outlen);
+
+ /* Simple API */
+ int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );
+ int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );
+
+ int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );
+ int blake2bp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );
+
+ int blake2xs( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );
+ int blake2xb( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );
+
+ /* This is simply an alias for blake2b */
+ int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
diff --git a/libarchive/archive_blake2_impl.h b/libarchive/archive_blake2_impl.h
new file mode 100644
index 000000000000..c1df82e0c95d
--- /dev/null
+++ b/libarchive/archive_blake2_impl.h
@@ -0,0 +1,160 @@
+/*
+ BLAKE2 reference source code package - reference C implementations
+
+ Copyright 2012, Samuel Neves <sneves@dei.uc.pt>. You may use this under the
+ terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at
+ your option. The terms of these licenses can be found at:
+
+ - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
+ - OpenSSL license : https://www.openssl.org/source/license.html
+ - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0
+
+ More information about the BLAKE2 hash function can be found at
+ https://blake2.net.
+*/
+#ifndef BLAKE2_IMPL_H
+#define BLAKE2_IMPL_H
+
+#include <stdint.h>
+#include <string.h>
+
+#if !defined(__cplusplus) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L)
+ #if defined(_MSC_VER)
+ #define BLAKE2_INLINE __inline
+ #elif defined(__GNUC__)
+ #define BLAKE2_INLINE __inline__
+ #else
+ #define BLAKE2_INLINE
+ #endif
+#else
+ #define BLAKE2_INLINE inline
+#endif
+
+static BLAKE2_INLINE uint32_t load32( const void *src )
+{
+#if defined(NATIVE_LITTLE_ENDIAN)
+ uint32_t w;
+ memcpy(&w, src, sizeof w);
+ return w;
+#else
+ const uint8_t *p = ( const uint8_t * )src;
+ return (( uint32_t )( p[0] ) << 0) |
+ (( uint32_t )( p[1] ) << 8) |
+ (( uint32_t )( p[2] ) << 16) |
+ (( uint32_t )( p[3] ) << 24) ;
+#endif
+}
+
+static BLAKE2_INLINE uint64_t load64( const void *src )
+{
+#if defined(NATIVE_LITTLE_ENDIAN)
+ uint64_t w;
+ memcpy(&w, src, sizeof w);
+ return w;
+#else
+ const uint8_t *p = ( const uint8_t * )src;
+ return (( uint64_t )( p[0] ) << 0) |
+ (( uint64_t )( p[1] ) << 8) |
+ (( uint64_t )( p[2] ) << 16) |
+ (( uint64_t )( p[3] ) << 24) |
+ (( uint64_t )( p[4] ) << 32) |
+ (( uint64_t )( p[5] ) << 40) |
+ (( uint64_t )( p[6] ) << 48) |
+ (( uint64_t )( p[7] ) << 56) ;
+#endif
+}
+
+static BLAKE2_INLINE uint16_t load16( const void *src )
+{
+#if defined(NATIVE_LITTLE_ENDIAN)
+ uint16_t w;
+ memcpy(&w, src, sizeof w);
+ return w;
+#else
+ const uint8_t *p = ( const uint8_t * )src;
+ return ( uint16_t )((( uint32_t )( p[0] ) << 0) |
+ (( uint32_t )( p[1] ) << 8));
+#endif
+}
+
+static BLAKE2_INLINE void store16( void *dst, uint16_t w )
+{
+#if defined(NATIVE_LITTLE_ENDIAN)
+ memcpy(dst, &w, sizeof w);
+#else
+ uint8_t *p = ( uint8_t * )dst;
+ *p++ = ( uint8_t )w; w >>= 8;
+ *p++ = ( uint8_t )w;
+#endif
+}
+
+static BLAKE2_INLINE void store32( void *dst, uint32_t w )
+{
+#if defined(NATIVE_LITTLE_ENDIAN)
+ memcpy(dst, &w, sizeof w);
+#else
+ uint8_t *p = ( uint8_t * )dst;
+ p[0] = (uint8_t)(w >> 0);
+ p[1] = (uint8_t)(w >> 8);
+ p[2] = (uint8_t)(w >> 16);
+ p[3] = (uint8_t)(w >> 24);
+#endif
+}
+
+static BLAKE2_INLINE void store64( void *dst, uint64_t w )
+{
+#if defined(NATIVE_LITTLE_ENDIAN)
+ memcpy(dst, &w, sizeof w);
+#else
+ uint8_t *p = ( uint8_t * )dst;
+ p[0] = (uint8_t)(w >> 0);
+ p[1] = (uint8_t)(w >> 8);
+ p[2] = (uint8_t)(w >> 16);
+ p[3] = (uint8_t)(w >> 24);
+ p[4] = (uint8_t)(w >> 32);
+ p[5] = (uint8_t)(w >> 40);
+ p[6] = (uint8_t)(w >> 48);
+ p[7] = (uint8_t)(w >> 56);
+#endif
+}
+
+static BLAKE2_INLINE uint64_t load48( const void *src )
+{
+ const uint8_t *p = ( const uint8_t * )src;
+ return (( uint64_t )( p[0] ) << 0) |
+ (( uint64_t )( p[1] ) << 8) |
+ (( uint64_t )( p[2] ) << 16) |
+ (( uint64_t )( p[3] ) << 24) |
+ (( uint64_t )( p[4] ) << 32) |
+ (( uint64_t )( p[5] ) << 40) ;
+}
+
+static BLAKE2_INLINE void store48( void *dst, uint64_t w )
+{
+ uint8_t *p = ( uint8_t * )dst;
+ p[0] = (uint8_t)(w >> 0);
+ p[1] = (uint8_t)(w >> 8);
+ p[2] = (uint8_t)(w >> 16);
+ p[3] = (uint8_t)(w >> 24);
+ p[4] = (uint8_t)(w >> 32);
+ p[5] = (uint8_t)(w >> 40);
+}
+
+static BLAKE2_INLINE uint32_t rotr32( const uint32_t w, const unsigned c )
+{
+ return ( w >> c ) | ( w << ( 32 - c ) );
+}
+
+static BLAKE2_INLINE uint64_t rotr64( const uint64_t w, const unsigned c )
+{
+ return ( w >> c ) | ( w << ( 64 - c ) );
+}
+
+/* prevents compiler optimizing out memset() */
+static BLAKE2_INLINE void secure_zero_memory(void *v, size_t n)
+{
+ static void *(*const volatile memset_v)(void *, int, size_t) = &memset;
+ memset_v(v, 0, n);
+}
+
+#endif
diff --git a/libarchive/archive_blake2s_ref.c b/libarchive/archive_blake2s_ref.c
new file mode 100644
index 000000000000..d92ffd0fc56a
--- /dev/null
+++ b/libarchive/archive_blake2s_ref.c
@@ -0,0 +1,367 @@
+/*
+ BLAKE2 reference source code package - reference C implementations
+
+ Copyright 2012, Samuel Neves <sneves@dei.uc.pt>. You may use this under the
+ terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at
+ your option. The terms of these licenses can be found at:
+
+ - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
+ - OpenSSL license : https://www.openssl.org/source/license.html
+ - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0
+
+ More information about the BLAKE2 hash function can be found at
+ https://blake2.net.
+*/
+
+#include <stdint.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "archive_blake2.h"
+#include "archive_blake2_impl.h"
+
+static const uint32_t blake2s_IV[8] =
+{
+ 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL,
+ 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL
+};
+
+static const uint8_t blake2s_sigma[10][16] =
+{
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } ,
+ { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } ,
+ { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 } ,
+ { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 } ,
+ { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 } ,
+ { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 } ,
+ { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 } ,
+ { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 } ,
+ { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 } ,
+ { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 } ,
+};
+
+static void blake2s_set_lastnode( blake2s_state *S )
+{
+ S->f[1] = (uint32_t)-1;
+}
+
+/* Some helper functions, not necessarily useful */
+static int blake2s_is_lastblock( const blake2s_state *S )
+{
+ return S->f[0] != 0;
+}
+
+static void blake2s_set_lastblock( blake2s_state *S )
+{
+ if( S->last_node ) blake2s_set_lastnode( S );
+
+ S->f[0] = (uint32_t)-1;
+}
+
+static void blake2s_increment_counter( blake2s_state *S, const uint32_t inc )
+{
+ S->t[0] += inc;
+ S->t[1] += ( S->t[0] < inc );
+}
+
+static void blake2s_init0( blake2s_state *S )
+{
+ size_t i;
+ memset( S, 0, sizeof( blake2s_state ) );
+
+ for( i = 0; i < 8; ++i ) S->h[i] = blake2s_IV[i];
+}
+
+/* init2 xors IV with input parameter block */
+int blake2s_init_param( blake2s_state *S, const blake2s_param *P )
+{
+ const unsigned char *p = ( const unsigned char * )( P );
+ size_t i;
+
+ blake2s_init0( S );
+
+ /* IV XOR ParamBlock */
+ for( i = 0; i < 8; ++i )
+ S->h[i] ^= load32( &p[i * 4] );
+
+ S->outlen = P->digest_length;
+ return 0;
+}
+
+
+/* Sequential blake2s initialization */
+int blake2s_init( blake2s_state *S, size_t outlen )
+{
+ blake2s_param P[1];
+
+ /* Move interval verification here? */
+ if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1;
+
+ P->digest_length = (uint8_t)outlen;
+ P->key_length = 0;
+ P->fanout = 1;
+ P->depth = 1;
+ store32( &P->leaf_length, 0 );
+ store32( &P->node_offset, 0 );
+ store16( &P->xof_length, 0 );
+ P->node_depth = 0;
+ P->inner_length = 0;
+ /* memset(P->reserved, 0, sizeof(P->reserved) ); */
+ memset( P->salt, 0, sizeof( P->salt ) );
+ memset( P->personal, 0, sizeof( P->personal ) );
+ return blake2s_init_param( S, P );
+}
+
+int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen )
+{
+ blake2s_param P[1];
+
+ if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return -1;
+
+ if ( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1;
+
+ P->digest_length = (uint8_t)outlen;
+ P->key_length = (uint8_t)keylen;
+ P->fanout = 1;
+ P->depth = 1;
+ store32( &P->leaf_length, 0 );
+ store32( &P->node_offset, 0 );
+ store16( &P->xof_length, 0 );
+ P->node_depth = 0;
+ P->inner_length = 0;
+ /* memset(P->reserved, 0, sizeof(P->reserved) ); */
+ memset( P->salt, 0, sizeof( P->salt ) );
+ memset( P->personal, 0, sizeof( P->personal ) );
+
+ if( blake2s_init_param( S, P ) < 0 ) return -1;
+
+ {
+ uint8_t block[BLAKE2S_BLOCKBYTES];
+ memset( block, 0, BLAKE2S_BLOCKBYTES );
+ memcpy( block, key, keylen );
+ blake2s_update( S, block, BLAKE2S_BLOCKBYTES );
+ secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */
+ }
+ return 0;
+}
+
+#define G(r,i,a,b,c,d) \
+ do { \
+ a = a + b + m[blake2s_sigma[r][2*i+0]]; \
+ d = rotr32(d ^ a, 16); \
+ c = c + d; \
+ b = rotr32(b ^ c, 12); \
+ a = a + b + m[blake2s_sigma[r][2*i+1]]; \
+ d = rotr32(d ^ a, 8); \
+ c = c + d; \
+ b = rotr32(b ^ c, 7); \
+ } while(0)
+
+#define ROUND(r) \
+ do { \
+ G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \
+ G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \
+ G(r,2,v[ 2],v[ 6],v[10],v[14]); \
+ G(r,3,v[ 3],v[ 7],v[11],v[15]); \
+ G(r,4,v[ 0],v[ 5],v[10],v[15]); \
+ G(r,5,v[ 1],v[ 6],v[11],v[12]); \
+ G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \
+ G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \
+ } while(0)
+
+static void blake2s_compress( blake2s_state *S, const uint8_t in[BLAKE2S_BLOCKBYTES] )
+{
+ uint32_t m[16];
+ uint32_t v[16];
+ size_t i;
+
+ for( i = 0; i < 16; ++i ) {
+ m[i] = load32( in + i * sizeof( m[i] ) );
+ }
+
+ for( i = 0; i < 8; ++i ) {
+ v[i] = S->h[i];
+ }
+
+ v[ 8] = blake2s_IV[0];
+ v[ 9] = blake2s_IV[1];
+ v[10] = blake2s_IV[2];
+ v[11] = blake2s_IV[3];
+ v[12] = S->t[0] ^ blake2s_IV[4];
+ v[13] = S->t[1] ^ blake2s_IV[5];
+ v[14] = S->f[0] ^ blake2s_IV[6];
+ v[15] = S->f[1] ^ blake2s_IV[7];
+
+ ROUND( 0 );
+ ROUND( 1 );
+ ROUND( 2 );
+ ROUND( 3 );
+ ROUND( 4 );
+ ROUND( 5 );
+ ROUND( 6 );
+ ROUND( 7 );
+ ROUND( 8 );
+ ROUND( 9 );
+
+ for( i = 0; i < 8; ++i ) {
+ S->h[i] = S->h[i] ^ v[i] ^ v[i + 8];
+ }
+}
+
+#undef G
+#undef ROUND
+
+int blake2s_update( blake2s_state *S, const void *pin, size_t inlen )
+{
+ const unsigned char * in = (const unsigned char *)pin;
+ if( inlen > 0 )
+ {
+ size_t left = S->buflen;
+ size_t fill = BLAKE2S_BLOCKBYTES - left;
+ if( inlen > fill )
+ {
+ S->buflen = 0;
+ memcpy( S->buf + left, in, fill ); /* Fill buffer */
+ blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES );
+ blake2s_compress( S, S->buf ); /* Compress */
+ in += fill; inlen -= fill;
+ while(inlen > BLAKE2S_BLOCKBYTES) {
+ blake2s_increment_counter(S, BLAKE2S_BLOCKBYTES);
+ blake2s_compress( S, in );
+ in += BLAKE2S_BLOCKBYTES;
+ inlen -= BLAKE2S_BLOCKBYTES;
+ }
+ }
+ memcpy( S->buf + S->buflen, in, inlen );
+ S->buflen += inlen;
+ }
+ return 0;
+}
+
+int blake2s_final( blake2s_state *S, void *out, size_t outlen )
+{
+ uint8_t buffer[BLAKE2S_OUTBYTES] = {0};
+ size_t i;
+
+ if( out == NULL || outlen < S->outlen )
+ return -1;
+
+ if( blake2s_is_lastblock( S ) )
+ return -1;
+
+ blake2s_increment_counter( S, ( uint32_t )S->buflen );
+ blake2s_set_lastblock( S );
+ memset( S->buf + S->buflen, 0, BLAKE2S_BLOCKBYTES - S->buflen ); /* Padding */
+ blake2s_compress( S, S->buf );
+
+ for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */
+ store32( buffer + sizeof( S->h[i] ) * i, S->h[i] );
+
+ memcpy( out, buffer, outlen );
+ secure_zero_memory(buffer, sizeof(buffer));
+ return 0;
+}
+
+int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen )
+{
+ blake2s_state S[1];
+
+ /* Verify parameters */
+ if ( NULL == in && inlen > 0 ) return -1;
+
+ if ( NULL == out ) return -1;
+
+ if ( NULL == key && keylen > 0) return -1;
+
+ if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1;
+
+ if( keylen > BLAKE2S_KEYBYTES ) return -1;
+
+ if( keylen > 0 )
+ {
+ if( blake2s_init_key( S, outlen, key, keylen ) < 0 ) return -1;
+ }
+ else
+ {
+ if( blake2s_init( S, outlen ) < 0 ) return -1;
+ }
+
+ blake2s_update( S, ( const uint8_t * )in, inlen );
+ blake2s_final( S, out, outlen );
+ return 0;
+}
+
+#if defined(SUPERCOP)
+int crypto_hash( unsigned char *out, unsigned char *in, unsigned long long inlen )
+{
+ return blake2s( out, BLAKE2S_OUTBYTES, in, inlen, NULL, 0 );
+}
+#endif
+
+#if defined(BLAKE2S_SELFTEST)
+#include <string.h>
+#include "blake2-kat.h"
+int main( void )
+{
+ uint8_t key[BLAKE2S_KEYBYTES];
+ uint8_t buf[BLAKE2_KAT_LENGTH];
+ size_t i, step;
+
+ for( i = 0; i < BLAKE2S_KEYBYTES; ++i )
+ key[i] = ( uint8_t )i;
+
+ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )
+ buf[i] = ( uint8_t )i;
+
+ /* Test simple API */
+ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )
+ {
+ uint8_t hash[BLAKE2S_OUTBYTES];
+ blake2s( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES );
+
+ if( 0 != memcmp( hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES ) )
+ {
+ goto fail;
+ }
+ }
+
+ /* Test streaming API */
+ for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) {
+ for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) {
+ uint8_t hash[BLAKE2S_OUTBYTES];
+ blake2s_state S;
+ uint8_t * p = buf;
+ size_t mlen = i;
+ int err = 0;
+
+ if( (err = blake2s_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) {
+ goto fail;
+ }
+
+ while (mlen >= step) {
+ if ( (err = blake2s_update(&S, p, step)) < 0 ) {
+ goto fail;
+ }
+ mlen -= step;
+ p += step;
+ }
+ if ( (err = blake2s_update(&S, p, mlen)) < 0) {
+ goto fail;
+ }
+ if ( (err = blake2s_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) {
+ goto fail;
+ }
+
+ if (0 != memcmp(hash, blake2s_keyed_kat[i], BLAKE2S_OUTBYTES)) {
+ goto fail;
+ }
+ }
+ }
+
+ puts( "ok" );
+ return 0;
+fail:
+ puts("error");
+ return -1;
+}
+#endif
diff --git a/libarchive/archive_blake2sp_ref.c b/libarchive/archive_blake2sp_ref.c
new file mode 100644
index 000000000000..90a385775d78
--- /dev/null
+++ b/libarchive/archive_blake2sp_ref.c
@@ -0,0 +1,359 @@
+/*
+ BLAKE2 reference source code package - reference C implementations
+
+ Copyright 2012, Samuel Neves <sneves@dei.uc.pt>. You may use this under the
+ terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at
+ your option. The terms of these licenses can be found at:
+
+ - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
+ - OpenSSL license : https://www.openssl.org/source/license.html
+ - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0
+
+ More information about the BLAKE2 hash function can be found at
+ https://blake2.net.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#if defined(_OPENMP)
+#include <omp.h>
+#endif
+
+#include "archive_blake2.h"
+#include "archive_blake2_impl.h"
+
+#define PARALLELISM_DEGREE 8
+
+/*
+ blake2sp_init_param defaults to setting the expecting output length
+ from the digest_length parameter block field.
+
+ In some cases, however, we do not want this, as the output length
+ of these instances is given by inner_length instead.
+*/
+static int blake2sp_init_leaf_param( blake2s_state *S, const blake2s_param *P )
+{
+ int err = blake2s_init_param(S, P);
+ S->outlen = P->inner_length;
+ return err;
+}
+
+static int blake2sp_init_leaf( blake2s_state *S, size_t outlen, size_t keylen, uint32_t offset )
+{
+ blake2s_param P[1];
+ P->digest_length = (uint8_t)outlen;
+ P->key_length = (uint8_t)keylen;
+ P->fanout = PARALLELISM_DEGREE;
+ P->depth = 2;
+ store32( &P->leaf_length, 0 );
+ store32( &P->node_offset, offset );
+ store16( &P->xof_length, 0 );
+ P->node_depth = 0;
+ P->inner_length = BLAKE2S_OUTBYTES;
+ memset( P->salt, 0, sizeof( P->salt ) );
+ memset( P->personal, 0, sizeof( P->personal ) );
+ return blake2sp_init_leaf_param( S, P );
+}
+
+static int blake2sp_init_root( blake2s_state *S, size_t outlen, size_t keylen )
+{
+ blake2s_param P[1];
+ P->digest_length = (uint8_t)outlen;
+ P->key_length = (uint8_t)keylen;
+ P->fanout = PARALLELISM_DEGREE;
+ P->depth = 2;
+ store32( &P->leaf_length, 0 );
+ store32( &P->node_offset, 0 );
+ store16( &P->xof_length, 0 );
+ P->node_depth = 1;
+ P->inner_length = BLAKE2S_OUTBYTES;
+ memset( P->salt, 0, sizeof( P->salt ) );
+ memset( P->personal, 0, sizeof( P->personal ) );
+ return blake2s_init_param( S, P );
+}
+
+
+int blake2sp_init( blake2sp_state *S, size_t outlen )
+{
+ size_t i;
+
+ if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1;
+
+ memset( S->buf, 0, sizeof( S->buf ) );
+ S->buflen = 0;
+ S->outlen = outlen;
+
+ if( blake2sp_init_root( S->R, outlen, 0 ) < 0 )
+ return -1;
+
+ for( i = 0; i < PARALLELISM_DEGREE; ++i )
+ if( blake2sp_init_leaf( S->S[i], outlen, 0, i ) < 0 ) return -1;
+
+ S->R->last_node = 1;
+ S->S[PARALLELISM_DEGREE - 1]->last_node = 1;
+ return 0;
+}
+
+int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen )
+{
+ size_t i;
+
+ if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1;
+
+ if( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return -1;
+
+ memset( S->buf, 0, sizeof( S->buf ) );
+ S->buflen = 0;
+ S->outlen = outlen;
+
+ if( blake2sp_init_root( S->R, outlen, keylen ) < 0 )
+ return -1;
+
+ for( i = 0; i < PARALLELISM_DEGREE; ++i )
+ if( blake2sp_init_leaf( S->S[i], outlen, keylen, i ) < 0 ) return -1;
+
+ S->R->last_node = 1;
+ S->S[PARALLELISM_DEGREE - 1]->last_node = 1;
+ {
+ uint8_t block[BLAKE2S_BLOCKBYTES];
+ memset( block, 0, BLAKE2S_BLOCKBYTES );
+ memcpy( block, key, keylen );
+
+ for( i = 0; i < PARALLELISM_DEGREE; ++i )
+ blake2s_update( S->S[i], block, BLAKE2S_BLOCKBYTES );
+
+ secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */
+ }
+ return 0;
+}
+
+
+int blake2sp_update( blake2sp_state *S, const void *pin, size_t inlen )
+{
+ const unsigned char * in = (const unsigned char *)pin;
+ size_t left = S->buflen;
+ size_t fill = sizeof( S->buf ) - left;
+ size_t i;
+
+ if( left && inlen >= fill )
+ {
+ memcpy( S->buf + left, in, fill );
+
+ for( i = 0; i < PARALLELISM_DEGREE; ++i )
+ blake2s_update( S->S[i], S->buf + i * BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES );
+
+ in += fill;
+ inlen -= fill;
+ left = 0;
+ }
+
+#if defined(_OPENMP)
+ #pragma omp parallel shared(S), num_threads(PARALLELISM_DEGREE)
+#else
+ for( i = 0; i < PARALLELISM_DEGREE; ++i )
+#endif
+ {
+#if defined(_OPENMP)
+ size_t i = omp_get_thread_num();
+#endif
+ size_t inlen__ = inlen;
+ const unsigned char *in__ = ( const unsigned char * )in;
+ in__ += i * BLAKE2S_BLOCKBYTES;
+
+ while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES )
+ {
+ blake2s_update( S->S[i], in__, BLAKE2S_BLOCKBYTES );
+ in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES;
+ inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES;
+ }
+ }
+
+ in += inlen - inlen % ( PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES );
+ inlen %= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES;
+
+ if( inlen > 0 )
+ memcpy( S->buf + left, in, inlen );
+
+ S->buflen = left + inlen;
+ return 0;
+}
+
+
+int blake2sp_final( blake2sp_state *S, void *out, size_t outlen )
+{
+ uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES];
+ size_t i;
+
+ if(out == NULL || outlen < S->outlen) {
+ return -1;
+ }
+
+ for( i = 0; i < PARALLELISM_DEGREE; ++i )
+ {
+ if( S->buflen > i * BLAKE2S_BLOCKBYTES )
+ {
+ size_t left = S->buflen - i * BLAKE2S_BLOCKBYTES;
+
+ if( left > BLAKE2S_BLOCKBYTES ) left = BLAKE2S_BLOCKBYTES;
+
+ blake2s_update( S->S[i], S->buf + i * BLAKE2S_BLOCKBYTES, left );
+ }
+
+ blake2s_final( S->S[i], hash[i], BLAKE2S_OUTBYTES );
+ }
+
+ for( i = 0; i < PARALLELISM_DEGREE; ++i )
+ blake2s_update( S->R, hash[i], BLAKE2S_OUTBYTES );
+
+ return blake2s_final( S->R, out, S->outlen );
+}
+
+
+int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen )
+{
+ uint8_t hash[PARALLELISM_DEGREE][BLAKE2S_OUTBYTES];
+ blake2s_state S[PARALLELISM_DEGREE][1];
+ blake2s_state FS[1];
+ size_t i;
+
+ /* Verify parameters */
+ if ( NULL == in && inlen > 0 ) return -1;
+
+ if ( NULL == out ) return -1;
+
+ if ( NULL == key && keylen > 0) return -1;
+
+ if( !outlen || outlen > BLAKE2S_OUTBYTES ) return -1;
+
+ if( keylen > BLAKE2S_KEYBYTES ) return -1;
+
+ for( i = 0; i < PARALLELISM_DEGREE; ++i )
+ if( blake2sp_init_leaf( S[i], outlen, keylen, i ) < 0 ) return -1;
+
+ S[PARALLELISM_DEGREE - 1]->last_node = 1; /* mark last node */
+
+ if( keylen > 0 )
+ {
+ uint8_t block[BLAKE2S_BLOCKBYTES];
+ memset( block, 0, BLAKE2S_BLOCKBYTES );
+ memcpy( block, key, keylen );
+
+ for( i = 0; i < PARALLELISM_DEGREE; ++i )
+ blake2s_update( S[i], block, BLAKE2S_BLOCKBYTES );
+
+ secure_zero_memory( block, BLAKE2S_BLOCKBYTES ); /* Burn the key from stack */
+ }
+
+#if defined(_OPENMP)
+ #pragma omp parallel shared(S,hash), num_threads(PARALLELISM_DEGREE)
+#else
+
+ for( i = 0; i < PARALLELISM_DEGREE; ++i )
+#endif
+ {
+#if defined(_OPENMP)
+ size_t i = omp_get_thread_num();
+#endif
+ size_t inlen__ = inlen;
+ const unsigned char *in__ = ( const unsigned char * )in;
+ in__ += i * BLAKE2S_BLOCKBYTES;
+
+ while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES )
+ {
+ blake2s_update( S[i], in__, BLAKE2S_BLOCKBYTES );
+ in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES;
+ inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES;
+ }
+
+ if( inlen__ > i * BLAKE2S_BLOCKBYTES )
+ {
+ const size_t left = inlen__ - i * BLAKE2S_BLOCKBYTES;
+ const size_t len = left <= BLAKE2S_BLOCKBYTES ? left : BLAKE2S_BLOCKBYTES;
+ blake2s_update( S[i], in__, len );
+ }
+
+ blake2s_final( S[i], hash[i], BLAKE2S_OUTBYTES );
+ }
+
+ if( blake2sp_init_root( FS, outlen, keylen ) < 0 )
+ return -1;
+
+ FS->last_node = 1;
+
+ for( i = 0; i < PARALLELISM_DEGREE; ++i )
+ blake2s_update( FS, hash[i], BLAKE2S_OUTBYTES );
+
+ return blake2s_final( FS, out, outlen );
+}
+
+
+
+#if defined(BLAKE2SP_SELFTEST)
+#include <string.h>
+#include "blake2-kat.h"
+int main( void )
+{
+ uint8_t key[BLAKE2S_KEYBYTES];
+ uint8_t buf[BLAKE2_KAT_LENGTH];
+ size_t i, step;
+
+ for( i = 0; i < BLAKE2S_KEYBYTES; ++i )
+ key[i] = ( uint8_t )i;
+
+ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )
+ buf[i] = ( uint8_t )i;
+
+ /* Test simple API */
+ for( i = 0; i < BLAKE2_KAT_LENGTH; ++i )
+ {
+ uint8_t hash[BLAKE2S_OUTBYTES];
+ blake2sp( hash, BLAKE2S_OUTBYTES, buf, i, key, BLAKE2S_KEYBYTES );
+
+ if( 0 != memcmp( hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES ) )
+ {
+ goto fail;
+ }
+ }
+
+ /* Test streaming API */
+ for(step = 1; step < BLAKE2S_BLOCKBYTES; ++step) {
+ for (i = 0; i < BLAKE2_KAT_LENGTH; ++i) {
+ uint8_t hash[BLAKE2S_OUTBYTES];
+ blake2sp_state S;
+ uint8_t * p = buf;
+ size_t mlen = i;
+ int err = 0;
+
+ if( (err = blake2sp_init_key(&S, BLAKE2S_OUTBYTES, key, BLAKE2S_KEYBYTES)) < 0 ) {
+ goto fail;
+ }
+
+ while (mlen >= step) {
+ if ( (err = blake2sp_update(&S, p, step)) < 0 ) {
+ goto fail;
+ }
+ mlen -= step;
+ p += step;
+ }
+ if ( (err = blake2sp_update(&S, p, mlen)) < 0) {
+ goto fail;
+ }
+ if ( (err = blake2sp_final(&S, hash, BLAKE2S_OUTBYTES)) < 0) {
+ goto fail;
+ }
+
+ if (0 != memcmp(hash, blake2sp_keyed_kat[i], BLAKE2S_OUTBYTES)) {
+ goto fail;
+ }
+ }
+ }
+
+ puts( "ok" );
+ return 0;
+fail:
+ puts("error");
+ return -1;
+}
+#endif
diff --git a/libarchive/archive_read_support_format_all.c b/libarchive/archive_read_support_format_all.c
index 2127ebd33538..dea558bbfcc2 100644
--- a/libarchive/archive_read_support_format_all.c
+++ b/libarchive/archive_read_support_format_all.c
@@ -72,6 +72,7 @@ archive_read_support_format_all(struct archive *a)
archive_read_support_format_7zip(a);
archive_read_support_format_cab(a);
archive_read_support_format_rar(a);
+ archive_read_support_format_rar5(a);
archive_read_support_format_iso9660(a);
/* Seek is really bad, since it forces the read-ahead
* logic to discard buffered data. */
diff --git a/libarchive/archive_read_support_format_by_code.c b/libarchive/archive_read_support_format_by_code.c
index 084563f4310e..034353d78f63 100644
--- a/libarchive/archive_read_support_format_by_code.c
+++ b/libarchive/archive_read_support_format_by_code.c
@@ -60,6 +60,9 @@ archive_read_support_format_by_code(struct archive *a, int format_code)
case ARCHIVE_FORMAT_RAR:
return archive_read_support_format_rar(a);
break;
+ case ARCHIVE_FORMAT_RAR_V5:
+ return archive_read_support_format_rar5(a);
+ break;
case ARCHIVE_FORMAT_TAR:
return archive_read_support_format_tar(a);
break;
diff --git a/libarchive/archive_read_support_format_rar5.c b/libarchive/archive_read_support_format_rar5.c
new file mode 100644
index 000000000000..9f121a1bed84
--- /dev/null
+++ b/libarchive/archive_read_support_format_rar5.c
@@ -0,0 +1,3457 @@
+/*-
+* Copyright (c) 2018 Grzegorz Antoniak (http://antoniak.org)
+* 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.
+*/
+
+#include "archive_platform.h"
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#include <time.h>
+#ifdef HAVE_ZLIB_H
+#include <zlib.h> /* crc32 */
+#endif
+
+#include "archive.h"
+#ifndef HAVE_ZLIB_H
+#include "archive_crc32.h"
+#endif
+
+#include "archive_entry.h"
+#include "archive_entry_locale.h"
+#include "archive_ppmd7_private.h"
+#include "archive_entry_private.h"
+
+#ifdef HAVE_BLAKE2_H
+#include <blake2.h>
+#else
+#include "archive_blake2.h"
+#endif
+
+/*#define CHECK_CRC_ON_SOLID_SKIP*/
+/*#define DONT_FAIL_ON_CRC_ERROR*/
+/*#define DEBUG*/
+
+#define rar5_min(a, b) (((a) > (b)) ? (b) : (a))
+#define rar5_max(a, b) (((a) > (b)) ? (a) : (b))
+#define rar5_countof(X) ((const ssize_t) (sizeof(X) / sizeof(*X)))
+
+#if defined DEBUG
+#define DEBUG_CODE if(1)
+#else
+#define DEBUG_CODE if(0)
+#endif
+
+/* Real RAR5 magic number is:
+ *
+ * 0x52, 0x61, 0x72, 0x21, 0x1a, 0x07, 0x01, 0x00
+ * "Rar!→•☺·\x00"
+ *
+ * It's stored in `rar5_signature` after XOR'ing it with 0xA1, because I don't
+ * want to put this magic sequence in each binary that uses libarchive, so
+ * applications that scan through the file for this marker won't trigger on
+ * this "false" one.
+ *
+ * The array itself is decrypted in `rar5_init` function. */
+
+unsigned char rar5_signature[] = { 243, 192, 211, 128, 187, 166, 160, 161 };
+const ssize_t rar5_signature_size = sizeof(rar5_signature);
+const size_t g_unpack_buf_chunk_size = 1024;
+const size_t g_unpack_window_size = 0x20000;
+
+struct file_header {
+ ssize_t bytes_remaining;
+ ssize_t unpacked_size;
+ int64_t last_offset; /* Used in sanity checks. */
+ int64_t last_size; /* Used in sanity checks. */
+
+ uint8_t solid : 1; /* Is this a solid stream? */
+ uint8_t service : 1; /* Is this file a service data? */
+
+ /* Optional time fields. */
+ uint64_t e_mtime;
+ uint64_t e_ctime;
+ uint64_t e_atime;
+ uint32_t e_unix_ns;
+
+ /* Optional hash fields. */
+ uint32_t stored_crc32;
+ uint32_t calculated_crc32;
+ uint8_t blake2sp[32];
+ blake2sp_state b2state;
+ char has_blake2;
+};
+
+enum FILTER_TYPE {
+ FILTER_DELTA = 0, /* Generic pattern. */
+ FILTER_E8 = 1, /* Intel x86 code. */
+ FILTER_E8E9 = 2, /* Intel x86 code. */
+ FILTER_ARM = 3, /* ARM code. */
+ FILTER_AUDIO = 4, /* Audio filter, not used in RARv5. */
+ FILTER_RGB = 5, /* Color palette, not used in RARv5. */
+ FILTER_ITANIUM = 6, /* Intel's Itanium, not used in RARv5. */
+ FILTER_PPM = 7, /* Predictive pattern matching, not used in RARv5. */
+ FILTER_NONE = 8,
+};
+
+struct filter_info {
+ int type;
+ int channels;
+ int pos_r;
+
+ int64_t block_start;
+ ssize_t block_length;
+ uint16_t width;
+};
+
+struct data_ready {
+ char used;
+ const uint8_t* buf;
+ size_t size;
+ int64_t offset;
+};
+
+struct cdeque {
+ uint16_t beg_pos;
+ uint16_t end_pos;
+ uint16_t cap_mask;
+ uint16_t size;
+ size_t* arr;
+};
+
+struct decode_table {
+ uint32_t size;
+ int32_t decode_len[16];
+ uint32_t decode_pos[16];
+ uint32_t quick_bits;
+ uint8_t quick_len[1 << 10];
+ uint16_t quick_num[1 << 10];
+ uint16_t decode_num[306];
+};
+
+struct comp_state {
+ /* Flag used to specify if unpacker needs to reinitialize the uncompression
+ * context. */
+ uint8_t initialized : 1;
+
+ /* Flag used when applying filters. */
+ uint8_t all_filters_applied : 1;
+
+ /* Flag used to skip file context reinitialization, used when unpacker is
+ * skipping through different multivolume archives. */
+ uint8_t switch_multivolume : 1;
+
+ /* Flag used to specify if unpacker has processed the whole data block or
+ * just a part of it. */
+ uint8_t block_parsing_finished : 1;
+
+ int notused : 4;
+
+ int flags; /* Uncompression flags. */
+ int method; /* Uncompression algorithm method. */
+ int version; /* Uncompression algorithm version. */
+ ssize_t window_size; /* Size of window_buf. */
+ uint8_t* window_buf; /* Circular buffer used during
+ decompression. */
+ uint8_t* filtered_buf; /* Buffer used when applying filters. */
+ const uint8_t* block_buf; /* Buffer used when merging blocks. */
+ size_t window_mask; /* Convinience field; window_size - 1. */
+ int64_t write_ptr; /* This amount of data has been unpacked in
+ the window buffer. */
+ int64_t last_write_ptr; /* This amount of data has been stored in
+ the output file. */
+ int64_t last_unstore_ptr; /* Counter of bytes extracted during
+ unstoring. This is separate from
+ last_write_ptr because of how SERVICE
+ base blocks are handled during skipping
+ in solid multiarchive archives. */
+ int64_t solid_offset; /* Additional offset inside the window
+ buffer, used in unpacking solid
+ archives. */
+ ssize_t cur_block_size; /* Size of current data block. */
+ int last_len; /* Flag used in lzss decompression. */
+
+ /* Decode tables used during lzss uncompression. */
+
+#define HUFF_BC 20
+ struct decode_table bd; /* huffman bit lengths */
+#define HUFF_NC 306
+ struct decode_table ld; /* literals */
+#define HUFF_DC 64
+ struct decode_table dd; /* distances */
+#define HUFF_LDC 16
+ struct decode_table ldd; /* lower bits of distances */
+#define HUFF_RC 44
+ struct decode_table rd; /* repeating distances */
+#define HUFF_TABLE_SIZE (HUFF_NC + HUFF_DC + HUFF_RC + HUFF_LDC)
+
+ /* Circular deque for storing filters. */
+ struct cdeque filters;
+ int64_t last_block_start; /* Used for sanity checking. */
+ ssize_t last_block_length; /* Used for sanity checking. */
+
+ /* Distance cache used during lzss uncompression. */
+ int dist_cache[4];
+
+ /* Data buffer stack. */
+ struct data_ready dready[2];
+};
+
+/* Bit reader state. */
+struct bit_reader {
+ int8_t bit_addr; /* Current bit pointer inside current byte. */
+ int in_addr; /* Current byte pointer. */
+};
+
+/* RARv5 block header structure. */
+struct compressed_block_header {
+ union {
+ struct {
+ uint8_t bit_size : 3;
+ uint8_t byte_count : 3;
+ uint8_t is_last_block : 1;
+ uint8_t is_table_present : 1;
+ } block_flags;
+ uint8_t block_flags_u8;
+ };
+
+ uint8_t block_cksum;
+};
+
+/* RARv5 main header structure. */
+struct main_header {
+ /* Does the archive contain solid streams? */
+ uint8_t solid : 1;
+
+ /* If this a multi-file archive? */
+ uint8_t volume : 1;
+ uint8_t endarc : 1;
+ uint8_t notused : 5;
+
+ int vol_no;
+};
+
+struct generic_header {
+ uint8_t split_after : 1;
+ uint8_t split_before : 1;
+ uint8_t padding : 6;
+ int size;
+ int last_header_id;
+};
+
+struct multivolume {
+ int expected_vol_no;
+ uint8_t* push_buf;
+};
+
+/* Main context structure. */
+struct rar5 {
+ int header_initialized;
+
+ /* Set to 1 if current file is positioned AFTER the magic value
+ * of the archive file. This is used in header reading functions. */
+ int skipped_magic;
+
+ /* Set to not zero if we're in skip mode (either by calling rar5_data_skip
+ * function or when skipping over solid streams). Set to 0 when in
+ * extraction mode. This is used during checksum calculation functions. */
+ int skip_mode;
+
+ /* An offset to QuickOpen list. This is not supported by this unpacker,
+ * becuase we're focusing on streaming interface. QuickOpen is designed
+ * to make things quicker for non-stream interfaces, so it's not our
+ * use case. */
+ uint64_t qlist_offset;
+
+ /* An offset to additional Recovery data. This is not supported by this
+ * unpacker. Recovery data are additional Reed-Solomon codes that could
+ * be used to calculate bytes that are missing in archive or are
+ * corrupted. */
+ uint64_t rr_offset;
+
+ /* Various context variables grouped to different structures. */
+ struct generic_header generic;
+ struct main_header main;
+ struct comp_state cstate;
+ struct file_header file;
+ struct bit_reader bits;
+ struct multivolume vol;
+
+ /* The header of currently processed RARv5 block. Used in main
+ * decompression logic loop. */
+ struct compressed_block_header last_block_hdr;
+};
+
+/* Forward function declarations. */
+
+static int verify_global_checksums(struct archive_read* a);
+static int rar5_read_data_skip(struct archive_read *a);
+static int push_data_ready(struct archive_read* a, struct rar5* rar,
+ const uint8_t* buf, size_t size, int64_t offset);
+
+/* CDE_xxx = Circular Double Ended (Queue) return values. */
+enum CDE_RETURN_VALUES {
+ CDE_OK, CDE_ALLOC, CDE_PARAM, CDE_OUT_OF_BOUNDS,
+};
+
+/* Clears the contents of this circular deque. */
+static void cdeque_clear(struct cdeque* d) {
+ d->size = 0;
+ d->beg_pos = 0;
+ d->end_pos = 0;
+}
+
+/* Creates a new circular deque object. Capacity must be power of 2: 8, 16, 32,
+ * 64, 256, etc. When the user will add another item above current capacity,
+ * the circular deque will overwrite the oldest entry. */
+static int cdeque_init(struct cdeque* d, int max_capacity_power_of_2) {
+ if(d == NULL || max_capacity_power_of_2 == 0)
+ return CDE_PARAM;
+
+ d->cap_mask = max_capacity_power_of_2 - 1;
+ d->arr = NULL;
+
+ if((max_capacity_power_of_2 & d->cap_mask) > 0)
+ return CDE_PARAM;
+
+ cdeque_clear(d);
+ d->arr = malloc(sizeof(void*) * max_capacity_power_of_2);
+
+ return d->arr ? CDE_OK : CDE_ALLOC;
+}
+
+/* Return the current size (not capacity) of circular deque `d`. */
+static size_t cdeque_size(struct cdeque* d) {
+ return d->size;
+}
+
+/* Returns the first element of current circular deque. Note that this function
+ * doesn't perform any bounds checking. If you need bounds checking, use
+ * `cdeque_front()` function instead. */
+static void cdeque_front_fast(struct cdeque* d, void** value) {
+ *value = (void*) d->arr[d->beg_pos];
+}
+
+/* Returns the first element of current circular deque. This function
+ * performs bounds checking. */
+static int cdeque_front(struct cdeque* d, void** value) {
+ if(d->size > 0) {
+ cdeque_front_fast(d, value);
+ return CDE_OK;
+ } else
+ return CDE_OUT_OF_BOUNDS;
+}
+
+/* Pushes a new element into the end of this circular deque object. If current
+ * size will exceed capacity, the oldest element will be overwritten. */
+static int cdeque_push_back(struct cdeque* d, void* item) {
+ if(d == NULL)
+ return CDE_PARAM;
+
+ if(d->size == d->cap_mask + 1)
+ return CDE_OUT_OF_BOUNDS;
+
+ d->arr[d->end_pos] = (size_t) item;
+ d->end_pos = (d->end_pos + 1) & d->cap_mask;
+ d->size++;
+
+ return CDE_OK;
+}
+
+/* Pops a front element of this circular deque object and returns its value.
+ * This function doesn't perform any bounds checking. */
+static void cdeque_pop_front_fast(struct cdeque* d, void** value) {
+ *value = (void*) d->arr[d->beg_pos];
+ d->beg_pos = (d->beg_pos + 1) & d->cap_mask;
+ d->size--;
+}
+
+/* Pops a front element of this cicrular deque object and returns its value.
+ * This function performs bounds checking. */
+static int cdeque_pop_front(struct cdeque* d, void** value) {
+ if(!d || !value)
+ return CDE_PARAM;
+
+ if(d->size == 0)
+ return CDE_OUT_OF_BOUNDS;
+
+ cdeque_pop_front_fast(d, value);
+ return CDE_OK;
+}
+
+/* Convinience function to cast filter_info** to void **. */
+static void** cdeque_filter_p(struct filter_info** f) {
+ return (void**) (size_t) f;
+}
+
+/* Convinience function to cast filter_info* to void *. */
+static void* cdeque_filter(struct filter_info* f) {
+ return (void**) (size_t) f;
+}
+
+/* Destroys this circular deque object. Dellocates the memory of the collection
+ * buffer, but doesn't deallocate the memory of any pointer passed to this
+ * deque as a value. */
+static void cdeque_free(struct cdeque* d) {
+ if(!d)
+ return;
+
+ if(!d->arr)
+ return;
+
+ free(d->arr);
+
+ d->arr = NULL;
+ d->beg_pos = -1;
+ d->end_pos = -1;
+ d->cap_mask = 0;
+}
+
+static inline struct rar5* get_context(struct archive_read* a) {
+ return (struct rar5*) a->format->data;
+}
+
+// TODO: make sure these functions return a little endian number
+
+/* Convinience functions used by filter implementations. */
+
+static uint32_t read_filter_data(struct rar5* rar, uint32_t offset) {
+ uint32_t* dptr = (uint32_t*) &rar->cstate.window_buf[offset];
+ // TODO: bswap if big endian
+ return *dptr;
+}
+
+static void write_filter_data(struct rar5* rar, uint32_t offset,
+ uint32_t value)
+{
+ uint32_t* dptr = (uint32_t*) &rar->cstate.filtered_buf[offset];
+ // TODO: bswap if big endian
+ *dptr = value;
+}
+
+static void circular_memcpy(uint8_t* dst, uint8_t* window, const int mask,
+ int64_t start, int64_t end)
+{
+ if((start & mask) > (end & mask)) {
+ ssize_t len1 = mask + 1 - (start & mask);
+ ssize_t len2 = end & mask;
+
+ memcpy(dst, &window[start & mask], len1);
+ memcpy(dst + len1, window, len2);
+ } else {
+ memcpy(dst, &window[start & mask], (size_t) (end - start));
+ }
+}
+
+/* Allocates a new filter descriptor and adds it to the filter array. */
+static struct filter_info* add_new_filter(struct rar5* rar) {
+ struct filter_info* f =
+ (struct filter_info*) calloc(1, sizeof(struct filter_info));
+
+ if(!f) {
+ return NULL;
+ }
+
+ cdeque_push_back(&rar->cstate.filters, cdeque_filter(f));
+ return f;
+}
+
+static int run_delta_filter(struct rar5* rar, struct filter_info* flt) {
+ int i;
+ ssize_t dest_pos, src_pos = 0;
+
+ for(i = 0; i < flt->channels; i++) {
+ uint8_t prev_byte = 0;
+ for(dest_pos = i;
+ dest_pos < flt->block_length;
+ dest_pos += flt->channels)
+ {
+ uint8_t byte;
+
+ byte = rar->cstate.window_buf[(rar->cstate.solid_offset +
+ flt->block_start + src_pos) & rar->cstate.window_mask];
+
+ prev_byte -= byte;
+ rar->cstate.filtered_buf[dest_pos] = prev_byte;
+ src_pos++;
+ }
+ }
+
+ return ARCHIVE_OK;
+}
+
+static int run_e8e9_filter(struct rar5* rar, struct filter_info* flt,
+ int extended)
+{
+ const uint32_t file_size = 0x1000000;
+ ssize_t i;
+
+ circular_memcpy(rar->cstate.filtered_buf,
+ rar->cstate.window_buf,
+ rar->cstate.window_mask,
+ rar->cstate.solid_offset + flt->block_start,
+ rar->cstate.solid_offset + flt->block_start + flt->block_length);
+
+ for(i = 0; i < flt->block_length - 4;) {
+ uint8_t b = rar->cstate.window_buf[(rar->cstate.solid_offset +
+ flt->block_start + i++) & rar->cstate.window_mask];
+
+ /* 0xE8 = x86's call <relative_addr_uint32> (function call)
+ * 0xE9 = x86's jmp <relative_addr_uint32> (unconditional jump) */
+ if(b == 0xE8 || (extended && b == 0xE9)) {
+
+ uint32_t addr;
+ uint32_t offset = (i + flt->block_start) % file_size;
+
+ addr = read_filter_data(rar, (rar->cstate.solid_offset +
+ flt->block_start + i) & rar->cstate.window_mask);
+
+ if(addr & 0x80000000) {
+ if(((addr + offset) & 0x80000000) == 0) {
+ write_filter_data(rar, i, addr + file_size);
+ }
+ } else {
+ if((addr - file_size) & 0x80000000) {
+ uint32_t naddr = addr - offset;
+ write_filter_data(rar, i, naddr);
+ }
+ }
+
+ i += 4;
+ }
+ }
+
+ return ARCHIVE_OK;
+}
+
+static int run_arm_filter(struct rar5* rar, struct filter_info* flt) {
+ ssize_t i = 0;
+ uint32_t offset;
+ const int mask = rar->cstate.window_mask;
+
+ circular_memcpy(rar->cstate.filtered_buf,
+ rar->cstate.window_buf,
+ rar->cstate.window_mask,
+ rar->cstate.solid_offset + flt->block_start,
+ rar->cstate.solid_offset + flt->block_start + flt->block_length);
+
+ for(i = 0; i < flt->block_length - 3; i += 4) {
+ uint8_t* b = &rar->cstate.window_buf[(rar->cstate.solid_offset +
+ flt->block_start + i) & mask];
+
+ if(b[3] == 0xEB) {
+ /* 0xEB = ARM's BL (branch + link) instruction. */
+ offset = read_filter_data(rar, (rar->cstate.solid_offset +
+ flt->block_start + i) & mask) & 0x00ffffff;
+
+ offset -= (uint32_t) ((i + flt->block_start) / 4);
+ offset = (offset & 0x00ffffff) | 0xeb000000;
+ write_filter_data(rar, i, offset);
+ }
+ }
+
+ return ARCHIVE_OK;
+}
+
+static int run_filter(struct archive_read* a, struct filter_info* flt) {
+ int ret;
+ struct rar5* rar = get_context(a);
+
+ if(rar->cstate.filtered_buf)
+ free(rar->cstate.filtered_buf);
+
+ rar->cstate.filtered_buf = malloc(flt->block_length);
+ if(!rar->cstate.filtered_buf) {
+ archive_set_error(&a->archive, ENOMEM, "Can't allocate memory for "
+ "filter data.");
+ return ARCHIVE_FATAL;
+ }
+
+ switch(flt->type) {
+ case FILTER_DELTA:
+ ret = run_delta_filter(rar, flt);
+ break;
+
+ case FILTER_E8:
+ /* fallthrough */
+ case FILTER_E8E9:
+ ret = run_e8e9_filter(rar, flt, flt->type == FILTER_E8E9);
+ break;
+
+ case FILTER_ARM:
+ ret = run_arm_filter(rar, flt);
+ break;
+
+ default:
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Unsupported filter type: 0x%02x", flt->type);
+ return ARCHIVE_FATAL;
+ }
+
+ if(ret != ARCHIVE_OK) {
+ /* Filter has failed. */
+ return ret;
+ }
+
+ if(ARCHIVE_OK != push_data_ready(a, rar, rar->cstate.filtered_buf,
+ flt->block_length, rar->cstate.last_write_ptr))
+ {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+ "Stack overflow when submitting unpacked data");
+
+ return ARCHIVE_FATAL;
+ }
+
+ rar->cstate.last_write_ptr += flt->block_length;
+ return ARCHIVE_OK;
+}
+
+/* The `push_data` function submits the selected data range to the user.
+ * Next call of `use_data` will use the pointer, size and offset arguments
+ * that are specified here. These arguments are pushed to the FIFO stack here,
+ * and popped from the stack by the `use_data` function. */
+static void push_data(struct archive_read* a, struct rar5* rar,
+ const uint8_t* buf, int64_t idx_begin, int64_t idx_end)
+{
+ const int wmask = rar->cstate.window_mask;
+ const ssize_t solid_write_ptr = (rar->cstate.solid_offset +
+ rar->cstate.last_write_ptr) & wmask;
+
+ idx_begin += rar->cstate.solid_offset;
+ idx_end += rar->cstate.solid_offset;
+
+ /* Check if our unpacked data is wrapped inside the window circular buffer.
+ * If it's not wrapped, it can be copied out by using a single memcpy,
+ * but when it's wrapped, we need to copy the first part with one
+ * memcpy, and the second part with another memcpy. */
+
+ if((idx_begin & wmask) > (idx_end & wmask)) {
+ /* The data is wrapped (begin offset sis bigger than end offset). */
+ const ssize_t frag1_size = rar->cstate.window_size - (idx_begin & wmask);
+ const ssize_t frag2_size = idx_end & wmask;
+
+ /* Copy the first part of the buffer first. */
+ push_data_ready(a, rar, buf + solid_write_ptr, frag1_size,
+ rar->cstate.last_write_ptr);
+
+ /* Copy the second part of the buffer. */
+ push_data_ready(a, rar, buf, frag2_size,
+ rar->cstate.last_write_ptr + frag1_size);
+
+ rar->cstate.last_write_ptr += frag1_size + frag2_size;
+ } else {
+ /* Data is not wrapped, so we can just use one call to copy the
+ * data. */
+ push_data_ready(a, rar,
+ buf + solid_write_ptr,
+ (idx_end - idx_begin) & wmask,
+ rar->cstate.last_write_ptr);
+
+ rar->cstate.last_write_ptr += idx_end - idx_begin;
+ }
+}
+
+/* Convinience function that submits the data to the user. It uses the
+ * unpack window buffer as a source location. */
+static void push_window_data(struct archive_read* a, struct rar5* rar,
+ int64_t idx_begin, int64_t idx_end)
+{
+ push_data(a, rar, rar->cstate.window_buf, idx_begin, idx_end);
+}
+
+static int apply_filters(struct archive_read* a) {
+ struct filter_info* flt;
+ struct rar5* rar = get_context(a);
+ int ret;
+
+ rar->cstate.all_filters_applied = 0;
+
+ /* Get the first filter that can be applied to our data. The data needs to
+ * be fully unpacked before the filter can be run. */
+ if(CDE_OK ==
+ cdeque_front(&rar->cstate.filters, cdeque_filter_p(&flt)))
+ {
+ /* Check if our unpacked data fully covers this filter's range. */
+ if(rar->cstate.write_ptr > flt->block_start &&
+ rar->cstate.write_ptr >= flt->block_start + flt->block_length)
+ {
+ /* Check if we have some data pending to be written right before
+ * the filter's start offset. */
+ if(rar->cstate.last_write_ptr == flt->block_start) {
+ /* Run the filter specified by descriptor `flt`. */
+ ret = run_filter(a, flt);
+ if(ret != ARCHIVE_OK) {
+ /* Filter failure, return error. */
+ return ret;
+ }
+
+ /* Filter descriptor won't be needed anymore after it's used,
+ * so remove it from the filter list and free its memory. */
+ (void) cdeque_pop_front(&rar->cstate.filters,
+ cdeque_filter_p(&flt));
+
+ free(flt);
+ } else {
+ /* We can't run filters yet, dump the memory right before the
+ * filter. */
+ push_window_data(a, rar, rar->cstate.last_write_ptr,
+ flt->block_start);
+ }
+
+ /* Return 'filter applied or not needed' state to the caller. */
+ return ARCHIVE_RETRY;
+ }
+ }
+
+ rar->cstate.all_filters_applied = 1;
+ return ARCHIVE_OK;
+}
+
+static void dist_cache_push(struct rar5* rar, int value) {
+ int* q = rar->cstate.dist_cache;
+
+ q[3] = q[2];
+ q[2] = q[1];
+ q[1] = q[0];
+ q[0] = value;
+}
+
+static int dist_cache_touch(struct rar5* rar, int index) {
+ int* q = rar->cstate.dist_cache;
+ int i, dist = q[index];
+
+ for(i = index; i > 0; i--)
+ q[i] = q[i - 1];
+
+ q[0] = dist;
+ return dist;
+}
+
+static void free_filters(struct rar5* rar) {
+ struct cdeque* d = &rar->cstate.filters;
+
+ /* Free any remaining filters. All filters should be naturally consumed by
+ * the unpacking function, so remaining filters after unpacking normally
+ * mean that unpacking wasn't successfull. But still of course we shouldn't
+ * leak memory in such case. */
+
+ /* cdeque_size() is a fast operation, so we can use it as a loop
+ * expression. */
+ while(cdeque_size(d) > 0) {
+ struct filter_info* f = NULL;
+
+ /* Pop_front will also decrease the collection's size. */
+ if(CDE_OK == cdeque_pop_front(d, cdeque_filter_p(&f)) && f != NULL)
+ free(f);
+ }
+
+ cdeque_clear(d);
+
+ /* Also clear out the variables needed for sanity checking. */
+ rar->cstate.last_block_start = 0;
+ rar->cstate.last_block_length = 0;
+}
+
+static void reset_file_context(struct rar5* rar) {
+ memset(&rar->file, 0, sizeof(rar->file));
+ blake2sp_init(&rar->file.b2state, 32);
+
+ if(rar->main.solid) {
+ rar->cstate.solid_offset += rar->cstate.write_ptr;
+ } else {
+ rar->cstate.solid_offset = 0;
+ }
+
+ rar->cstate.write_ptr = 0;
+ rar->cstate.last_write_ptr = 0;
+ rar->cstate.last_unstore_ptr = 0;
+
+ free_filters(rar);
+}
+
+static inline int get_archive_read(struct archive* a,
+ struct archive_read** ar)
+{
+ *ar = (struct archive_read*) a;
+ archive_check_magic(a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW,
+ "archive_read_support_format_rar5");
+
+ return ARCHIVE_OK;
+}
+
+static int read_ahead(struct archive_read* a, size_t how_many,
+ const uint8_t** ptr)
+{
+ if(!ptr)
+ return 0;
+
+ ssize_t avail = -1;
+ *ptr = __archive_read_ahead(a, how_many, &avail);
+
+ if(*ptr == NULL) {
+ return 0;
+ }
+
+ return 1;
+}
+
+static int consume(struct archive_read* a, int64_t how_many) {
+ int ret;
+
+ ret =
+ how_many == __archive_read_consume(a, how_many)
+ ? ARCHIVE_OK
+ : ARCHIVE_FATAL;
+
+ return ret;
+}
+
+/**
+ * Read a RAR5 variable sized numeric value. This value will be stored in
+ * `pvalue`. The `pvalue_len` argument points to a variable that will receive
+ * the byte count that was consumed in order to decode the `pvalue` value, plus
+ * one.
+ *
+ * pvalue_len is optional and can be NULL.
+ *
+ * NOTE: if `pvalue_len` is NOT NULL, the caller needs to manually consume
+ * the number of bytes that `pvalue_len` value contains. If the `pvalue_len`
+ * is NULL, this consuming operation is done automatically.
+ *
+ * Returns 1 if *pvalue was successfully read.
+ * Returns 0 if there was an error. In this case, *pvalue contains an
+ * invalid value.
+ */
+
+static int read_var(struct archive_read* a, uint64_t* pvalue,
+ uint64_t* pvalue_len)
+{
+ uint64_t result = 0;
+ size_t shift, i;
+ const uint8_t* p;
+ uint8_t b;
+
+ /* We will read maximum of 8 bytes. We don't have to handle the situation
+ * to read the RAR5 variable-sized value stored at the end of the file,
+ * because such situation will never happen. */
+ if(!read_ahead(a, 8, &p))
+ return 0;
+
+ for(shift = 0, i = 0; i < 8; i++, shift += 7) {
+ b = p[i];
+
+ /* Strip the MSB from the input byte and add the resulting number
+ * to the `result`. */
+ result += (b & 0x7F) << shift;
+
+ /* MSB set to 1 means we need to continue decoding process. MSB set
+ * to 0 means we're done.
+ *
+ * This conditional checks for the second case. */
+ if((b & 0x80) == 0) {
+ if(pvalue) {
+ *pvalue = result;
+ }
+
+ /* If the caller has passed the `pvalue_len` pointer, store the
+ * number of consumed bytes in it and do NOT consume those bytes,
+ * since the caller has all the information it needs to perform
+ * the consuming process itself. */
+ if(pvalue_len) {
+ *pvalue_len = 1 + i;
+ } else {
+ /* If the caller did not provide the `pvalue_len` pointer,
+ * it will not have the possibility to advance the file
+ * pointer, because it will not know how many bytes it needs
+ * to consume. This is why we handle such situation here
+ * autmatically. */
+ if(ARCHIVE_OK != consume(a, 1 + i)) {
+ return 0;
+ }
+ }
+
+ /* End of decoding process, return success. */
+ return 1;
+ }
+ }
+
+ /* The decoded value takes the maximum number of 8 bytes. It's a maximum
+ * number of bytes, so end decoding process here even if the first bit
+ * of last byte is 1. */
+ if(pvalue) {
+ *pvalue = result;
+ }
+
+ if(pvalue_len) {
+ *pvalue_len = 9;
+ } else {
+ if(ARCHIVE_OK != consume(a, 9)) {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static int read_var_sized(struct archive_read* a, size_t* pvalue,
+ size_t* pvalue_len)
+{
+ uint64_t v;
+ uint64_t v_size;
+
+ const int ret = pvalue_len
+ ? read_var(a, &v, &v_size)
+ : read_var(a, &v, NULL);
+
+ if(ret == 1 && pvalue) {
+ *pvalue = (size_t) v;
+ }
+
+ if(pvalue_len) {
+ /* Possible data truncation should be safe. */
+ *pvalue_len = (size_t) v_size;
+ }
+
+ return ret;
+}
+
+static int read_bits_32(struct rar5* rar, const uint8_t* p, uint32_t* value) {
+ uint32_t bits = p[rar->bits.in_addr] << 24;
+ bits |= p[rar->bits.in_addr + 1] << 16;
+ bits |= p[rar->bits.in_addr + 2] << 8;
+ bits |= p[rar->bits.in_addr + 3];
+ bits <<= rar->bits.bit_addr;
+ bits |= p[rar->bits.in_addr + 4] >> (8 - rar->bits.bit_addr);
+ *value = bits;
+ return ARCHIVE_OK;
+}
+
+static int read_bits_16(struct rar5* rar, const uint8_t* p, uint16_t* value) {
+ int bits = (int) p[rar->bits.in_addr] << 16;
+ bits |= (int) p[rar->bits.in_addr + 1] << 8;
+ bits |= (int) p[rar->bits.in_addr + 2];
+ bits >>= (8 - rar->bits.bit_addr);
+ *value = bits & 0xffff;
+ return ARCHIVE_OK;
+}
+
+static void skip_bits(struct rar5* rar, int bits) {
+ const int new_bits = rar->bits.bit_addr + bits;
+ rar->bits.in_addr += new_bits >> 3;
+ rar->bits.bit_addr = new_bits & 7;
+}
+
+/* n = up to 16 */
+static int read_consume_bits(struct rar5* rar, const uint8_t* p, int n,
+ int* value)
+{
+ uint16_t v;
+ int ret, num;
+
+ if(n == 0 || n > 16) {
+ /* This is a programmer error and should never happen in runtime. */
+ return ARCHIVE_FATAL;
+ }
+
+ ret = read_bits_16(rar, p, &v);
+ if(ret != ARCHIVE_OK)
+ return ret;
+
+ num = (int) v;
+ num >>= 16 - n;
+
+ skip_bits(rar, n);
+
+ if(value)
+ *value = num;
+
+ return ARCHIVE_OK;
+}
+
+static int read_u32(struct archive_read* a, uint32_t* pvalue) {
+ const uint8_t* p;
+ if(!read_ahead(a, 4, &p))
+ return 0;
+
+ *pvalue = *(const uint32_t*)p;
+
+ return ARCHIVE_OK == consume(a, 4) ? 1 : 0;
+}
+
+static int read_u64(struct archive_read* a, uint64_t* pvalue) {
+ const uint8_t* p;
+ if(!read_ahead(a, 8, &p))
+ return 0;
+
+ *pvalue = *(const uint64_t*)p;
+
+ return ARCHIVE_OK == consume(a, 8) ? 1 : 0;
+}
+
+static int bid_standard(struct archive_read* a) {
+ const uint8_t* p;
+
+ if(!read_ahead(a, rar5_signature_size, &p))
+ return -1;
+
+ if(!memcmp(rar5_signature, p, rar5_signature_size))
+ return 30;
+
+ return -1;
+}
+
+static int rar5_bid(struct archive_read* a, int best_bid) {
+ int my_bid;
+
+ if(best_bid > 30)
+ return -1;
+
+ my_bid = bid_standard(a);
+ if(my_bid > -1) {
+ return my_bid;
+ }
+
+ return -1;
+}
+
+static int rar5_options(struct archive_read *a, const char *key, const char *val) {
+ (void) a;
+ (void) key;
+ (void) val;
+
+ /* No options supported in this version. Return the ARCHIVE_WARN code to
+ * signal the options supervisor that the unpacker didn't handle setting
+ * this option. */
+
+ return ARCHIVE_WARN;
+}
+
+static void init_header(struct archive_read* a) {
+ a->archive.archive_format = ARCHIVE_FORMAT_RAR_V5;
+ a->archive.archive_format_name = "RAR5";
+}
+
+enum HEADER_FLAGS {
+ HFL_EXTRA_DATA = 0x0001, HFL_DATA = 0x0002, HFL_SKIP_IF_UNKNOWN = 0x0004,
+ HFL_SPLIT_BEFORE = 0x0008, HFL_SPLIT_AFTER = 0x0010, HFL_CHILD = 0x0020,
+ HFL_INHERITED = 0x0040
+};
+
+static int process_main_locator_extra_block(struct archive_read* a,
+ struct rar5* rar)
+{
+ uint64_t locator_flags;
+
+ if(!read_var(a, &locator_flags, NULL)) {
+ return ARCHIVE_EOF;
+ }
+
+ enum LOCATOR_FLAGS {
+ QLIST = 0x01, RECOVERY = 0x02,
+ };
+
+ if(locator_flags & QLIST) {
+ if(!read_var(a, &rar->qlist_offset, NULL)) {
+ return ARCHIVE_EOF;
+ }
+
+ /* qlist is not used */
+ }
+
+ if(locator_flags & RECOVERY) {
+ if(!read_var(a, &rar->rr_offset, NULL)) {
+ return ARCHIVE_EOF;
+ }
+
+ /* rr is not used */
+ }
+
+ return ARCHIVE_OK;
+}
+
+static int parse_file_extra_hash(struct archive_read* a, struct rar5* rar,
+ ssize_t* extra_data_size)
+{
+ size_t hash_type;
+ size_t value_len;
+
+ if(!read_var_sized(a, &hash_type, &value_len))
+ return ARCHIVE_EOF;
+
+ *extra_data_size -= value_len;
+ if(ARCHIVE_OK != consume(a, value_len)) {
+ return ARCHIVE_EOF;
+ }
+
+ enum HASH_TYPE {
+ BLAKE2sp = 0x00
+ };
+
+ /* The file uses BLAKE2sp checksum algorithm instead of plain old
+ * CRC32. */
+ if(hash_type == BLAKE2sp) {
+ const uint8_t* p;
+ const int hash_size = sizeof(rar->file.blake2sp);
+
+ if(!read_ahead(a, hash_size, &p))
+ return ARCHIVE_EOF;
+
+ rar->file.has_blake2 = 1;
+ memcpy(&rar->file.blake2sp, p, hash_size);
+
+ if(ARCHIVE_OK != consume(a, hash_size)) {
+ return ARCHIVE_EOF;
+ }
+
+ *extra_data_size -= hash_size;
+ } else {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Unsupported hash type (0x%02x)", (int) hash_type);
+ return ARCHIVE_FATAL;
+ }
+
+ return ARCHIVE_OK;
+}
+
+static uint64_t time_win_to_unix(uint64_t win_time) {
+ const size_t ns_in_sec = 10000000;
+ const uint64_t sec_to_unix = 11644473600LL;
+ return win_time / ns_in_sec - sec_to_unix;
+}
+
+static int parse_htime_item(struct archive_read* a, char unix_time,
+ uint64_t* where, ssize_t* extra_data_size)
+{
+ if(unix_time) {
+ uint32_t time_val;
+ if(!read_u32(a, &time_val))
+ return ARCHIVE_EOF;
+
+ *extra_data_size -= 4;
+ *where = (uint64_t) time_val;
+ } else {
+ uint64_t windows_time;
+ if(!read_u64(a, &windows_time))
+ return ARCHIVE_EOF;
+
+ *where = time_win_to_unix(windows_time);
+ *extra_data_size -= 8;
+ }
+
+ return ARCHIVE_OK;
+}
+
+static int parse_file_extra_htime(struct archive_read* a,
+ struct archive_entry* e, struct rar5* rar,
+ ssize_t* extra_data_size)
+{
+ char unix_time = 0;
+ size_t flags;
+ size_t value_len;
+
+ enum HTIME_FLAGS {
+ IS_UNIX = 0x01,
+ HAS_MTIME = 0x02,
+ HAS_CTIME = 0x04,
+ HAS_ATIME = 0x08,
+ HAS_UNIX_NS = 0x10,
+ };
+
+ if(!read_var_sized(a, &flags, &value_len))
+ return ARCHIVE_EOF;
+
+ *extra_data_size -= value_len;
+ if(ARCHIVE_OK != consume(a, value_len)) {
+ return ARCHIVE_EOF;
+ }
+
+ unix_time = flags & IS_UNIX;
+
+ if(flags & HAS_MTIME) {
+ parse_htime_item(a, unix_time, &rar->file.e_mtime, extra_data_size);
+ archive_entry_set_mtime(e, rar->file.e_mtime, 0);
+ }
+
+ if(flags & HAS_CTIME) {
+ parse_htime_item(a, unix_time, &rar->file.e_ctime, extra_data_size);
+ archive_entry_set_ctime(e, rar->file.e_ctime, 0);
+ }
+
+ if(flags & HAS_ATIME) {
+ parse_htime_item(a, unix_time, &rar->file.e_atime, extra_data_size);
+ archive_entry_set_atime(e, rar->file.e_atime, 0);
+ }
+
+ if(flags & HAS_UNIX_NS) {
+ if(!read_u32(a, &rar->file.e_unix_ns))
+ return ARCHIVE_EOF;
+
+ *extra_data_size -= 4;
+ }
+
+ return ARCHIVE_OK;
+}
+
+static int process_head_file_extra(struct archive_read* a,
+ struct archive_entry* e, struct rar5* rar,
+ ssize_t extra_data_size)
+{
+ size_t extra_field_size;
+ size_t extra_field_id;
+ int ret = ARCHIVE_FATAL;
+ size_t var_size;
+
+ enum EXTRA {
+ CRYPT = 0x01, HASH = 0x02, HTIME = 0x03, VERSION_ = 0x04,
+ REDIR = 0x05, UOWNER = 0x06, SUBDATA = 0x07
+ };
+
+ while(extra_data_size > 0) {
+ if(!read_var_sized(a, &extra_field_size, &var_size))
+ return ARCHIVE_EOF;
+
+ extra_data_size -= var_size;
+ if(ARCHIVE_OK != consume(a, var_size)) {
+ return ARCHIVE_EOF;
+ }
+
+ if(!read_var_sized(a, &extra_field_id, &var_size))
+ return ARCHIVE_EOF;
+
+ extra_data_size -= var_size;
+ if(ARCHIVE_OK != consume(a, var_size)) {
+ return ARCHIVE_EOF;
+ }
+
+ switch(extra_field_id) {
+ case HASH:
+ ret = parse_file_extra_hash(a, rar, &extra_data_size);
+ break;
+ case HTIME:
+ ret = parse_file_extra_htime(a, e, rar, &extra_data_size);
+ break;
+ case CRYPT:
+ /* fallthrough */
+ case VERSION_:
+ /* fallthrough */
+ case REDIR:
+ /* fallthrough */
+ case UOWNER:
+ /* fallthrough */
+ case SUBDATA:
+ /* fallthrough */
+ default:
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Unknown extra field in file/service block: 0x%02x",
+ (int) extra_field_id);
+ return ARCHIVE_FATAL;
+ }
+ }
+
+ if(ret != ARCHIVE_OK) {
+ /* Attribute not implemented. */
+ return ret;
+ }
+
+ return ARCHIVE_OK;
+}
+
+static int process_head_file(struct archive_read* a, struct rar5* rar,
+ struct archive_entry* entry, size_t block_flags)
+{
+ ssize_t extra_data_size = 0;
+ size_t data_size, file_flags, file_attr, compression_info, host_os,
+ name_size;
+ uint64_t unpacked_size;
+ uint32_t mtime = 0, crc;
+ int c_method = 0, c_version = 0, is_dir;
+ char name_utf8_buf[2048 * 4];
+ const uint8_t* p;
+
+ memset(entry, 0, sizeof(struct archive_entry));
+
+ /* Do not reset file context if we're switching archives. */
+ if(!rar->cstate.switch_multivolume) {
+ reset_file_context(rar);
+ }
+
+ if(block_flags & HFL_EXTRA_DATA) {
+ size_t edata_size;
+ if(!read_var_sized(a, &edata_size, NULL))
+ return ARCHIVE_EOF;
+
+ /* Intentional type cast from unsigned to signed. */
+ extra_data_size = (ssize_t) edata_size;
+ }
+
+ if(block_flags & HFL_DATA) {
+ if(!read_var_sized(a, &data_size, NULL))
+ return ARCHIVE_EOF;
+
+ rar->file.bytes_remaining = data_size;
+ } else {
+ rar->file.bytes_remaining = 0;
+
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "no data found in file/service block");
+ return ARCHIVE_FATAL;
+ }
+
+ enum FILE_FLAGS {
+ DIRECTORY = 0x0001, UTIME = 0x0002, CRC32 = 0x0004,
+ UNKNOWN_UNPACKED_SIZE = 0x0008,
+ };
+
+ enum COMP_INFO_FLAGS {
+ SOLID = 0x0040,
+ };
+
+ if(!read_var_sized(a, &file_flags, NULL))
+ return ARCHIVE_EOF;
+
+ if(!read_var(a, &unpacked_size, NULL))
+ return ARCHIVE_EOF;
+
+ if(file_flags & UNKNOWN_UNPACKED_SIZE) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+ "Files with unknown unpacked size are not supported");
+ return ARCHIVE_FATAL;
+ }
+
+ is_dir = (int) (file_flags & DIRECTORY);
+
+ if(!read_var_sized(a, &file_attr, NULL))
+ return ARCHIVE_EOF;
+
+ if(file_flags & UTIME) {
+ if(!read_u32(a, &mtime))
+ return ARCHIVE_EOF;
+ }
+
+ if(file_flags & CRC32) {
+ if(!read_u32(a, &crc))
+ return ARCHIVE_EOF;
+ }
+
+ if(!read_var_sized(a, &compression_info, NULL))
+ return ARCHIVE_EOF;
+
+ c_method = (int) (compression_info >> 7) & 0x7;
+ c_version = (int) (compression_info & 0x3f);
+
+ rar->cstate.window_size = is_dir ?
+ 0 :
+ g_unpack_window_size << ((compression_info >> 10) & 15);
+ rar->cstate.method = c_method;
+ rar->cstate.version = c_version + 50;
+
+ rar->file.solid = (compression_info & SOLID) > 0;
+ rar->file.service = 0;
+
+ if(!read_var_sized(a, &host_os, NULL))
+ return ARCHIVE_EOF;
+
+ enum HOST_OS {
+ HOST_WINDOWS = 0,
+ HOST_UNIX = 1,
+ };
+
+ if(host_os == HOST_WINDOWS) {
+ /* Host OS is Windows */
+
+ unsigned short mode = 0660;
+
+ if(is_dir)
+ mode |= AE_IFDIR;
+ else
+ mode |= AE_IFREG;
+
+ archive_entry_set_mode(entry, mode);
+ } else if(host_os == HOST_UNIX) {
+ /* Host OS is Unix */
+ archive_entry_set_mode(entry, (unsigned short) file_attr);
+ } else {
+ /* Unknown host OS */
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Unsupported Host OS: 0x%02x", (int) host_os);
+
+ return ARCHIVE_FATAL;
+ }
+
+ if(!read_var_sized(a, &name_size, NULL))
+ return ARCHIVE_EOF;
+
+ if(!read_ahead(a, name_size, &p))
+ return ARCHIVE_EOF;
+
+ if(name_size > 2047) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Filename is too long");
+
+ return ARCHIVE_FATAL;
+ }
+
+ if(name_size == 0) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "No filename specified");
+
+ return ARCHIVE_FATAL;
+ }
+
+ memcpy(name_utf8_buf, p, name_size);
+ name_utf8_buf[name_size] = 0;
+ if(ARCHIVE_OK != consume(a, name_size)) {
+ return ARCHIVE_EOF;
+ }
+
+ if(extra_data_size > 0) {
+ int ret = process_head_file_extra(a, entry, rar, extra_data_size);
+
+ /* Sanity check. */
+ if(extra_data_size < 0) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+ "File extra data size is not zero");
+ return ARCHIVE_FATAL;
+ }
+
+ if(ret != ARCHIVE_OK)
+ return ret;
+ }
+
+ if((file_flags & UNKNOWN_UNPACKED_SIZE) == 0) {
+ rar->file.unpacked_size = (ssize_t) unpacked_size;
+ archive_entry_set_size(entry, unpacked_size);
+ }
+
+ if(file_flags & UTIME) {
+ archive_entry_set_mtime(entry, (time_t) mtime, 0);
+ }
+
+ if(file_flags & CRC32) {
+ rar->file.stored_crc32 = crc;
+ }
+
+ archive_entry_update_pathname_utf8(entry, name_utf8_buf);
+
+ if(!rar->cstate.switch_multivolume) {
+ /* Do not reinitialize unpacking state if we're switching archives. */
+ rar->cstate.block_parsing_finished = 1;
+ rar->cstate.all_filters_applied = 1;
+ rar->cstate.initialized = 0;
+ }
+
+ if(rar->generic.split_before > 0) {
+ /* If now we're standing on a header that has a 'split before' mark,
+ * it means we're standing on a 'continuation' file header. Signal
+ * the caller that if it wants to move to another file, it must call
+ * rar5_read_header() function again. */
+
+ return ARCHIVE_RETRY;
+ } else {
+ return ARCHIVE_OK;
+ }
+}
+
+static int process_head_service(struct archive_read* a, struct rar5* rar,
+ struct archive_entry* entry, size_t block_flags)
+{
+ /* Process this SERVICE block the same way as FILE blocks. */
+ int ret = process_head_file(a, rar, entry, block_flags);
+ if(ret != ARCHIVE_OK)
+ return ret;
+
+ rar->file.service = 1;
+
+ /* But skip the data part automatically. It's no use for the user anyway.
+ * It contains only service data, not even needed to properly unpack the
+ * file. */
+ ret = rar5_read_data_skip(a);
+ if(ret != ARCHIVE_OK)
+ return ret;
+
+ /* After skipping, try parsing another block automatically. */
+ return ARCHIVE_RETRY;
+}
+
+static int process_head_main(struct archive_read* a, struct rar5* rar,
+ struct archive_entry* entry, size_t block_flags)
+{
+ (void) entry;
+
+ int ret;
+ size_t extra_data_size,
+ extra_field_size,
+ extra_field_id,
+ archive_flags;
+
+ if(block_flags & HFL_EXTRA_DATA) {
+ if(!read_var_sized(a, &extra_data_size, NULL))
+ return ARCHIVE_EOF;
+ } else {
+ extra_data_size = 0;
+ }
+
+ if(!read_var_sized(a, &archive_flags, NULL)) {
+ return ARCHIVE_EOF;
+ }
+
+ enum MAIN_FLAGS {
+ VOLUME = 0x0001, /* multi-volume archive */
+ VOLUME_NUMBER = 0x0002, /* volume number, first vol doesnt have it */
+ SOLID = 0x0004, /* solid archive */
+ PROTECT = 0x0008, /* contains Recovery info */
+ LOCK = 0x0010, /* readonly flag, not used */
+ };
+
+ rar->main.volume = (archive_flags & VOLUME) > 0;
+ rar->main.solid = (archive_flags & SOLID) > 0;
+
+ if(archive_flags & VOLUME_NUMBER) {
+ size_t v;
+ if(!read_var_sized(a, &v, NULL)) {
+ return ARCHIVE_EOF;
+ }
+
+ rar->main.vol_no = (int) v;
+ } else {
+ rar->main.vol_no = 0;
+ }
+
+ if(rar->vol.expected_vol_no > 0 &&
+ rar->main.vol_no != rar->vol.expected_vol_no)
+ {
+ /* Returning EOF instead of FATAL because of strange libarchive
+ * behavior. When opening multiple files via
+ * archive_read_open_filenames(), after reading up the whole last file,
+ * the __archive_read_ahead function wraps up to the first archive
+ * instead of returning EOF. */
+ return ARCHIVE_EOF;
+ }
+
+ if(extra_data_size == 0) {
+ /* Early return. */
+ return ARCHIVE_OK;
+ }
+
+ if(!read_var_sized(a, &extra_field_size, NULL)) {
+ return ARCHIVE_EOF;
+ }
+
+ if(!read_var_sized(a, &extra_field_id, NULL)) {
+ return ARCHIVE_EOF;
+ }
+
+ if(extra_field_size == 0) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Invalid extra field size");
+ return ARCHIVE_FATAL;
+ }
+
+ enum MAIN_EXTRA {
+ // Just one attribute here.
+ LOCATOR = 0x01,
+ };
+
+ switch(extra_field_id) {
+ case LOCATOR:
+ ret = process_main_locator_extra_block(a, rar);
+ if(ret != ARCHIVE_OK) {
+ /* Error while parsing main locator extra block. */
+ return ret;
+ }
+
+ break;
+ default:
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Unsupported extra type (0x%02x)", (int) extra_field_id);
+ return ARCHIVE_FATAL;
+ }
+
+ return ARCHIVE_OK;
+}
+
+static int scan_for_signature(struct archive_read* a);
+
+/* Base block processing function. A 'base block' is a RARv5 header block
+ * that tells the reader what kind of data is stored inside the block.
+ *
+ * From the birds-eye view a RAR file looks file this:
+ *
+ * <magic><base_block_1><base_block_2>...<base_block_n>
+ *
+ * There are a few types of base blocks. Those types are specified inside
+ * the 'switch' statement in this function. For example purposes, I'll write
+ * how a standard RARv5 file could look like here:
+ *
+ * <magic><MAIN><FILE><FILE><FILE><SERVICE><ENDARC>
+ *
+ * The structure above could describe an archive file with 3 files in it,
+ * one service "QuickOpen" block (that is ignored by this parser), and an
+ * end of file base block marker.
+ *
+ * If the file is stored in multiple archive files ("multiarchive"), it might
+ * look like this:
+ *
+ * .part01.rar: <magic><MAIN><FILE><ENDARC>
+ * .part02.rar: <magic><MAIN><FILE><ENDARC>
+ * .part03.rar: <magic><MAIN><FILE><ENDARC>
+ *
+ * This example could describe 3 RAR files that contain ONE archived file.
+ * Or it could describe 3 RAR files that contain 3 different files. Or 3
+ * RAR files than contain 2 files. It all depends what metadata is stored in
+ * the headers of <FILE> blocks.
+ *
+ * Each <FILE> block contains info about its size, the name of the file it's
+ * storing inside, and whether this FILE block is a continuation block of
+ * previous archive ('split before'), and is this FILE block should be
+ * continued in another archive ('split after'). By parsing the 'split before'
+ * and 'split after' flags, we're able to tell if multiple <FILE> base blocks
+ * are describing one file, or multiple files (with the same filename, for
+ * example).
+ *
+ * One thing to note is that if we're parsing the first <FILE> block, and
+ * we see 'split after' flag, then we need to jump over to another <FILE>
+ * block to be able to decompress rest of the data. To do this, we need
+ * to skip the <ENDARC> block, then switch to another file, then skip the
+ * <magic> block, <MAIN> block, and then we're standing on the proper
+ * <FILE> block.
+ */
+
+static int process_base_block(struct archive_read* a,
+ struct archive_entry* entry)
+{
+ struct rar5* rar = get_context(a);
+ uint32_t hdr_crc, computed_crc;
+ size_t raw_hdr_size, hdr_size_len, hdr_size;
+ size_t header_id, header_flags;
+ const uint8_t* p;
+ int ret;
+
+ /* Skip any unprocessed data for this file. */
+ if(rar->file.bytes_remaining) {
+ ret = rar5_read_data_skip(a);
+ if(ret != ARCHIVE_OK) {
+ return ret;
+ }
+ }
+
+ /* Read the expected CRC32 checksum. */
+ if(!read_u32(a, &hdr_crc)) {
+ return ARCHIVE_EOF;
+ }
+
+ /* Read header size. */
+ if(!read_var_sized(a, &raw_hdr_size, &hdr_size_len)) {
+ return ARCHIVE_EOF;
+ }
+
+ /* Sanity check, maximum header size for RAR5 is 2MB. */
+ if(raw_hdr_size > (2 * 1024 * 1024)) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Base block header is too large");
+
+ return ARCHIVE_FATAL;
+ }
+
+ hdr_size = raw_hdr_size + hdr_size_len;
+
+ /* Read the whole header data into memory, maximum memory use here is
+ * 2MB. */
+ if(!read_ahead(a, hdr_size, &p)) {
+ return ARCHIVE_EOF;
+ }
+
+ /* Verify the CRC32 of the header data. */
+ computed_crc = (uint32_t) crc32(0, p, (int) hdr_size);
+ if(computed_crc != hdr_crc) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Header CRC error");
+
+ return ARCHIVE_FATAL;
+ }
+
+ /* If the checksum is OK, we proceed with parsing. */
+ if(ARCHIVE_OK != consume(a, hdr_size_len)) {
+ return ARCHIVE_EOF;
+ }
+
+ if(!read_var_sized(a, &header_id, NULL))
+ return ARCHIVE_EOF;
+
+ if(!read_var_sized(a, &header_flags, NULL))
+ return ARCHIVE_EOF;
+
+ rar->generic.split_after = (header_flags & HFL_SPLIT_AFTER) > 0;
+ rar->generic.split_before = (header_flags & HFL_SPLIT_BEFORE) > 0;
+ rar->generic.size = hdr_size;
+ rar->generic.last_header_id = header_id;
+ rar->main.endarc = 0;
+
+ /* Those are possible header ids in RARv5. */
+ enum HEADER_TYPE {
+ HEAD_MARK = 0x00, HEAD_MAIN = 0x01, HEAD_FILE = 0x02,
+ HEAD_SERVICE = 0x03, HEAD_CRYPT = 0x04, HEAD_ENDARC = 0x05,
+ HEAD_UNKNOWN = 0xff,
+ };
+
+ switch(header_id) {
+ case HEAD_MAIN:
+ ret = process_head_main(a, rar, entry, header_flags);
+
+ /* Main header doesn't have any files in it, so it's pointless
+ * to return to the caller. Retry to next header, which should be
+ * HEAD_FILE/HEAD_SERVICE. */
+ if(ret == ARCHIVE_OK)
+ return ARCHIVE_RETRY;
+
+ return ret;
+ case HEAD_SERVICE:
+ ret = process_head_service(a, rar, entry, header_flags);
+ return ret;
+ case HEAD_FILE:
+ ret = process_head_file(a, rar, entry, header_flags);
+ return ret;
+ case HEAD_CRYPT:
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Encryption is not supported");
+ return ARCHIVE_FATAL;
+ case HEAD_ENDARC:
+ rar->main.endarc = 1;
+
+ /* After encountering an end of file marker, we need to take
+ * into consideration if this archive is continued in another
+ * file (i.e. is it part01.rar: is there a part02.rar?) */
+ if(rar->main.volume) {
+ /* In case there is part02.rar, position the read pointer
+ * in a proper place, so we can resume parsing. */
+
+ ret = scan_for_signature(a);
+ if(ret == ARCHIVE_FATAL) {
+ return ARCHIVE_EOF;
+ } else {
+ rar->vol.expected_vol_no = rar->main.vol_no + 1;
+ return ARCHIVE_OK;
+ }
+ } else {
+ return ARCHIVE_EOF;
+ }
+ case HEAD_MARK:
+ return ARCHIVE_EOF;
+ default:
+ if((header_flags & HFL_SKIP_IF_UNKNOWN) == 0) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Header type error");
+ return ARCHIVE_FATAL;
+ } else {
+ /* If the block is marked as 'skip if unknown', do as the flag
+ * says: skip the block instead on failing on it. */
+ return ARCHIVE_RETRY;
+ }
+ }
+
+#if !defined WIN32
+ // Not reached.
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+ "Internal unpacker error");
+ return ARCHIVE_FATAL;
+#endif
+}
+
+static int skip_base_block(struct archive_read* a) {
+ int ret;
+ struct rar5* rar = get_context(a);
+
+ struct archive_entry entry;
+ ret = process_base_block(a, &entry);
+
+ if(rar->generic.last_header_id == 2 && rar->generic.split_before > 0)
+ return ARCHIVE_OK;
+
+ if(ret == ARCHIVE_OK)
+ return ARCHIVE_RETRY;
+ else
+ return ret;
+}
+
+static int rar5_read_header(struct archive_read *a,
+ struct archive_entry *entry)
+{
+ struct rar5* rar = get_context(a);
+ int ret;
+
+ if(rar->header_initialized == 0) {
+ init_header(a);
+ rar->header_initialized = 1;
+ }
+
+ if(rar->skipped_magic == 0) {
+ if(ARCHIVE_OK != consume(a, rar5_signature_size)) {
+ return ARCHIVE_EOF;
+ }
+
+ rar->skipped_magic = 1;
+ }
+
+ do {
+ ret = process_base_block(a, entry);
+ } while(ret == ARCHIVE_RETRY ||
+ (rar->main.endarc > 0 && ret == ARCHIVE_OK));
+
+ return ret;
+}
+
+static void init_unpack(struct rar5* rar) {
+ rar->file.calculated_crc32 = 0;
+ rar->cstate.window_mask = rar->cstate.window_size - 1;
+
+ if(rar->cstate.window_buf)
+ free(rar->cstate.window_buf);
+
+ if(rar->cstate.filtered_buf)
+ free(rar->cstate.filtered_buf);
+
+ rar->cstate.window_buf = calloc(1, rar->cstate.window_size);
+ rar->cstate.filtered_buf = calloc(1, rar->cstate.window_size);
+
+ rar->cstate.write_ptr = 0;
+ rar->cstate.last_write_ptr = 0;
+
+ memset(&rar->cstate.bd, 0, sizeof(rar->cstate.bd));
+ memset(&rar->cstate.ld, 0, sizeof(rar->cstate.ld));
+ memset(&rar->cstate.dd, 0, sizeof(rar->cstate.dd));
+ memset(&rar->cstate.ldd, 0, sizeof(rar->cstate.ldd));
+ memset(&rar->cstate.rd, 0, sizeof(rar->cstate.rd));
+}
+
+static void update_crc(struct rar5* rar, const uint8_t* p, size_t to_read) {
+ int verify_crc;
+
+ if(rar->skip_mode) {
+#if defined CHECK_CRC_ON_SOLID_SKIP
+ verify_crc = 1;
+#else
+ verify_crc = 0;
+#endif
+ } else
+ verify_crc = 1;
+
+ if(verify_crc) {
+ /* Don't update CRC32 if the file doesn't have the `stored_crc32` info
+ filled in. */
+ if(rar->file.stored_crc32 > 0) {
+ rar->file.calculated_crc32 =
+ crc32(rar->file.calculated_crc32, p, to_read);
+ }
+
+ /* Check if the file uses an optional BLAKE2sp checksum algorithm. */
+ if(rar->file.has_blake2 > 0) {
+ /* Return value of the `update` function is always 0, so we can
+ * explicitly ignore it here. */
+ (void) blake2sp_update(&rar->file.b2state, p, to_read);
+ }
+ }
+}
+
+static int create_decode_tables(uint8_t* bit_length,
+ struct decode_table* table,
+ int size)
+{
+ int code, upper_limit = 0, i, lc[16];
+ uint32_t decode_pos_clone[rar5_countof(table->decode_pos)];
+ ssize_t cur_len, quick_data_size;
+
+ memset(&lc, 0, sizeof(lc));
+ memset(table->decode_num, 0, sizeof(table->decode_num));
+ table->size = size;
+ table->quick_bits = size == HUFF_NC ? 10 : 7;
+
+ for(i = 0; i < size; i++) {
+ lc[bit_length[i] & 15]++;
+ }
+
+ lc[0] = 0;
+ table->decode_pos[0] = 0;
+ table->decode_len[0] = 0;
+
+ for(i = 1; i < 16; i++) {
+ upper_limit += lc[i];
+
+ table->decode_len[i] = upper_limit << (16 - i);
+ table->decode_pos[i] = table->decode_pos[i - 1] + lc[i - 1];
+
+ upper_limit <<= 1;
+ }
+
+ memcpy(decode_pos_clone, table->decode_pos, sizeof(decode_pos_clone));
+
+ for(i = 0; i < size; i++) {
+ uint8_t clen = bit_length[i] & 15;
+ if(clen > 0) {
+ int last_pos = decode_pos_clone[clen];
+ table->decode_num[last_pos] = i;
+ decode_pos_clone[clen]++;
+ }
+ }
+
+ quick_data_size = 1 << table->quick_bits;
+ cur_len = 1;
+ for(code = 0; code < quick_data_size; code++) {
+ int bit_field = code << (16 - table->quick_bits);
+ int dist, pos;
+
+ while(cur_len < rar5_countof(table->decode_len) &&
+ bit_field >= table->decode_len[cur_len]) {
+ cur_len++;
+ }
+
+ table->quick_len[code] = (uint8_t) cur_len;
+
+ dist = bit_field - table->decode_len[cur_len - 1];
+ dist >>= (16 - cur_len);
+
+ pos = table->decode_pos[cur_len] + dist;
+ if(cur_len < rar5_countof(table->decode_pos) && pos < size) {
+ table->quick_num[code] = table->decode_num[pos];
+ } else {
+ table->quick_num[code] = 0;
+ }
+ }
+
+ return ARCHIVE_OK;
+}
+
+static int decode_number(struct archive_read* a, struct decode_table* table,
+ const uint8_t* p, uint16_t* num)
+{
+ int i, bits, dist;
+ uint16_t bitfield;
+ uint32_t pos;
+ struct rar5* rar = get_context(a);
+
+ if(ARCHIVE_OK != read_bits_16(rar, p, &bitfield)) {
+ return ARCHIVE_EOF;
+ }
+
+ bitfield &= 0xfffe;
+
+ if(bitfield < table->decode_len[table->quick_bits]) {
+ int code = bitfield >> (16 - table->quick_bits);
+ skip_bits(rar, table->quick_len[code]);
+ *num = table->quick_num[code];
+ return ARCHIVE_OK;
+ }
+
+ bits = 15;
+
+ for(i = table->quick_bits + 1; i < 15; i++) {
+ if(bitfield < table->decode_len[i]) {
+ bits = i;
+ break;
+ }
+ }
+
+ skip_bits(rar, bits);
+
+ dist = bitfield - table->decode_len[bits - 1];
+ dist >>= (16 - bits);
+ pos = table->decode_pos[bits] + dist;
+
+ if(pos >= table->size)
+ pos = 0;
+
+ *num = table->decode_num[pos];
+ return ARCHIVE_OK;
+}
+
+/* Reads and parses Huffman tables from the beginning of the block. */
+static int parse_tables(struct archive_read* a, struct rar5* rar,
+ const uint8_t* p)
+{
+ int ret, value, i, w, idx = 0;
+ uint8_t bit_length[HUFF_BC],
+ table[HUFF_TABLE_SIZE],
+ nibble_mask = 0xF0,
+ nibble_shift = 4;
+
+ enum { ESCAPE = 15 };
+
+ /* The data for table generation is compressed using a simple RLE-like
+ * algorithm when storing zeroes, so we need to unpack it first. */
+ for(w = 0, i = 0; w < HUFF_BC;) {
+ value = (p[i] & nibble_mask) >> nibble_shift;
+
+ if(nibble_mask == 0x0F)
+ ++i;
+
+ nibble_mask ^= 0xFF;
+ nibble_shift ^= 4;
+
+ /* Values smaller than 15 is data, so we write it directly. Value 15
+ * is a flag telling us that we need to unpack more bytes. */
+ if(value == ESCAPE) {
+ value = (p[i] & nibble_mask) >> nibble_shift;
+ if(nibble_mask == 0x0F)
+ ++i;
+ nibble_mask ^= 0xFF;
+ nibble_shift ^= 4;
+
+ if(value == 0) {
+ /* We sometimes need to write the actual value of 15, so this
+ * case handles that. */
+ bit_length[w++] = ESCAPE;
+ } else {
+ int k;
+
+ /* Fill zeroes. */
+ for(k = 0; k < value + 2; k++) {
+ bit_length[w++] = 0;
+ }
+ }
+ } else {
+ bit_length[w++] = value;
+ }
+ }
+
+ rar->bits.in_addr = i;
+ rar->bits.bit_addr = nibble_shift ^ 4;
+
+ ret = create_decode_tables(bit_length, &rar->cstate.bd, HUFF_BC);
+ if(ret != ARCHIVE_OK) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Decoding huffman tables failed");
+ return ARCHIVE_FATAL;
+ }
+
+ for(i = 0; i < HUFF_TABLE_SIZE;) {
+ uint16_t num;
+
+ ret = decode_number(a, &rar->cstate.bd, p, &num);
+ if(ret != ARCHIVE_OK) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Decoding huffman tables failed");
+ return ARCHIVE_FATAL;
+ }
+
+ if(num < 16) {
+ /* 0..15: store directly */
+ table[i] = (uint8_t) num;
+ i++;
+ continue;
+ }
+
+ if(num < 18) {
+ /* 16..17: repeat previous code */
+ uint16_t n;
+ if(ARCHIVE_OK != read_bits_16(rar, p, &n))
+ return ARCHIVE_EOF;
+
+ if(num == 16) {
+ n >>= 13;
+ n += 3;
+ skip_bits(rar, 3);
+ } else {
+ n >>= 9;
+ n += 11;
+ skip_bits(rar, 7);
+ }
+
+ if(i > 0) {
+ while(n-- > 0 && i < HUFF_TABLE_SIZE) {
+ table[i] = table[i - 1];
+ i++;
+ }
+ } else {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Unexpected error when decoding huffman tables");
+ return ARCHIVE_FATAL;
+ }
+
+ continue;
+ }
+
+ /* other codes: fill with zeroes `n` times */
+ uint16_t n;
+ if(ARCHIVE_OK != read_bits_16(rar, p, &n))
+ return ARCHIVE_EOF;
+
+ if(num == 18) {
+ n >>= 13;
+ n += 3;
+ skip_bits(rar, 3);
+ } else {
+ n >>= 9;
+ n += 11;
+ skip_bits(rar, 7);
+ }
+
+ while(n-- > 0 && i < HUFF_TABLE_SIZE)
+ table[i++] = 0;
+ }
+
+ ret = create_decode_tables(&table[idx], &rar->cstate.ld, HUFF_NC);
+ if(ret != ARCHIVE_OK) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Failed to create literal table");
+ return ARCHIVE_FATAL;
+ }
+
+ idx += HUFF_NC;
+
+ ret = create_decode_tables(&table[idx], &rar->cstate.dd, HUFF_DC);
+ if(ret != ARCHIVE_OK) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Failed to create distance table");
+ return ARCHIVE_FATAL;
+ }
+
+ idx += HUFF_DC;
+
+ ret = create_decode_tables(&table[idx], &rar->cstate.ldd, HUFF_LDC);
+ if(ret != ARCHIVE_OK) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Failed to create lower bits of distances table");
+ return ARCHIVE_FATAL;
+ }
+
+ idx += HUFF_LDC;
+
+ ret = create_decode_tables(&table[idx], &rar->cstate.rd, HUFF_RC);
+ if(ret != ARCHIVE_OK) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Failed to create repeating distances table");
+ return ARCHIVE_FATAL;
+ }
+
+ return ARCHIVE_OK;
+}
+
+/* Parses the block header, verifies its CRC byte, and saves the header
+ * fields inside the `hdr` pointer. */
+static int parse_block_header(struct archive_read* a, const uint8_t* p,
+ ssize_t* block_size, struct compressed_block_header* hdr)
+{
+ memcpy(hdr, p, sizeof(struct compressed_block_header));
+
+ if(hdr->block_flags.byte_count > 2) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Unsupported block header size (was %d, max is 2)",
+ hdr->block_flags.byte_count);
+ return ARCHIVE_FATAL;
+ }
+
+ /* This should probably use bit reader interface in order to be more
+ * future-proof. */
+ *block_size = 0;
+ switch(hdr->block_flags.byte_count) {
+ /* 1-byte block size */
+ case 0:
+ *block_size = *(const uint8_t*) &p[2];
+ break;
+
+ /* 2-byte block size */
+ case 1:
+ *block_size = *(const uint16_t*) &p[2];
+ break;
+
+ /* 3-byte block size */
+ case 2:
+ *block_size = *(const uint32_t*) &p[2];
+ *block_size &= 0x00FFFFFF;
+ break;
+
+ /* Other block sizes are not supported. This case is not reached,
+ * because we have an 'if' guard before the switch that makes sure
+ * of it. */
+ default:
+ return ARCHIVE_FATAL;
+ }
+
+ /* Verify the block header checksum. 0x5A is a magic value and is always
+ * constant. */
+ uint8_t calculated_cksum = 0x5A
+ ^ (uint8_t) hdr->block_flags_u8
+ ^ (uint8_t) *block_size
+ ^ (uint8_t) (*block_size >> 8)
+ ^ (uint8_t) (*block_size >> 16);
+
+ if(calculated_cksum != hdr->block_cksum) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Block checksum error: got 0x%02x, expected 0x%02x",
+ hdr->block_cksum, calculated_cksum);
+
+ return ARCHIVE_FATAL;
+ }
+
+ return ARCHIVE_OK;
+}
+
+/* Convinience function used during filter processing. */
+static int parse_filter_data(struct rar5* rar, const uint8_t* p,
+ uint32_t* filter_data)
+{
+ int i, bytes;
+ uint32_t data = 0;
+
+ if(ARCHIVE_OK != read_consume_bits(rar, p, 2, &bytes))
+ return ARCHIVE_EOF;
+
+ bytes++;
+
+ for(i = 0; i < bytes; i++) {
+ uint16_t byte;
+
+ if(ARCHIVE_OK != read_bits_16(rar, p, &byte)) {
+ return ARCHIVE_EOF;
+ }
+
+ data += (byte >> 8) << (i * 8);
+ skip_bits(rar, 8);
+ }
+
+ *filter_data = data;
+ return ARCHIVE_OK;
+}
+
+/* Function is used during sanity checking. */
+static int is_valid_filter_block_start(struct rar5* rar,
+ uint32_t start)
+{
+ const int64_t block_start = (ssize_t) start + rar->cstate.write_ptr;
+ const int64_t last_bs = rar->cstate.last_block_start;
+ const ssize_t last_bl = rar->cstate.last_block_length;
+
+ if(last_bs == 0 || last_bl == 0) {
+ /* We didn't have any filters yet, so accept this offset. */
+ return 1;
+ }
+
+ if(block_start >= last_bs + last_bl) {
+ /* Current offset is bigger than last block's end offset, so
+ * accept current offset. */
+ return 1;
+ }
+
+ /* Any other case is not a normal situation and we should fail. */
+ return 0;
+}
+
+/* The function will create a new filter, read its parameters from the input
+ * stream and add it to the filter collection. */
+static int parse_filter(struct archive_read* ar, const uint8_t* p) {
+ uint32_t block_start, block_length;
+ uint16_t filter_type;
+ struct rar5* rar = get_context(ar);
+
+ /* Read the parameters from the input stream. */
+ if(ARCHIVE_OK != parse_filter_data(rar, p, &block_start))
+ return ARCHIVE_EOF;
+
+ if(ARCHIVE_OK != parse_filter_data(rar, p, &block_length))
+ return ARCHIVE_EOF;
+
+ if(ARCHIVE_OK != read_bits_16(rar, p, &filter_type))
+ return ARCHIVE_EOF;
+
+ filter_type >>= 13;
+ skip_bits(rar, 3);
+
+ /* Perform some sanity checks on this filter parameters. Note that we
+ * allow only DELTA, E8/E9 and ARM filters here, because rest of filters
+ * are not used in RARv5. */
+
+ if(block_length < 4 ||
+ block_length > 0x400000 ||
+ filter_type > FILTER_ARM ||
+ !is_valid_filter_block_start(rar, block_start))
+ {
+ archive_set_error(&ar->archive, ARCHIVE_ERRNO_FILE_FORMAT, "Invalid "
+ "filter encountered");
+ return ARCHIVE_FATAL;
+ }
+
+ /* Allocate a new filter. */
+ struct filter_info* filt = add_new_filter(rar);
+ if(filt == NULL) {
+ archive_set_error(&ar->archive, ENOMEM, "Can't allocate memory for a "
+ "filter descriptor.");
+ return ARCHIVE_FATAL;
+ }
+
+ filt->type = filter_type;
+ filt->block_start = rar->cstate.write_ptr + block_start;
+ filt->block_length = block_length;
+
+ rar->cstate.last_block_start = filt->block_start;
+ rar->cstate.last_block_length = filt->block_length;
+
+ /* Read some more data in case this is a DELTA filter. Other filter types
+ * don't require any additional data over what was already read. */
+ if(filter_type == FILTER_DELTA) {
+ int channels;
+
+ if(ARCHIVE_OK != read_consume_bits(rar, p, 5, &channels))
+ return ARCHIVE_EOF;
+
+ filt->channels = channels + 1;
+ }
+
+ return ARCHIVE_OK;
+}
+
+static int decode_code_length(struct rar5* rar, const uint8_t* p,
+ uint16_t code)
+{
+ int lbits, length = 2;
+ if(code < 8) {
+ lbits = 0;
+ length += code;
+ } else {
+ lbits = code / 4 - 1;
+ length += (4 | (code & 3)) << lbits;
+ }
+
+ if(lbits > 0) {
+ int add;
+
+ if(ARCHIVE_OK != read_consume_bits(rar, p, lbits, &add))
+ return -1;
+
+ length += add;
+ }
+
+ return length;
+}
+
+static int copy_string(struct archive_read* a, int len, int dist) {
+ struct rar5* rar = get_context(a);
+ const int cmask = rar->cstate.window_mask;
+ const int64_t write_ptr = rar->cstate.write_ptr + rar->cstate.solid_offset;
+ int i;
+
+ /* The unpacker spends most of the time in this function. It would be
+ * a good idea to introduce some optimizations here.
+ *
+ * Just remember that this loop treats buffers that overlap differently
+ * than buffers that do not overlap. This is why a simple memcpy(3) call
+ * will not be enough. */
+
+ for(i = 0; i < len; i++) {
+ const ssize_t write_idx = (write_ptr + i) & cmask;
+ const ssize_t read_idx = (write_ptr + i - dist) & cmask;
+ rar->cstate.window_buf[write_idx] = rar->cstate.window_buf[read_idx];
+ }
+
+ rar->cstate.write_ptr += len;
+ return ARCHIVE_OK;
+}
+
+static int do_uncompress_block(struct archive_read* a, const uint8_t* p) {
+ struct rar5* rar = get_context(a);
+ uint16_t num;
+ int ret;
+
+ const int cmask = rar->cstate.window_mask;
+ const struct compressed_block_header* hdr = &rar->last_block_hdr;
+ const uint8_t bit_size = 1 + hdr->block_flags.bit_size;
+
+ while(1) {
+ if(rar->cstate.write_ptr - rar->cstate.last_write_ptr >
+ (rar->cstate.window_size >> 1)) {
+
+ /* Don't allow growing data by more than half of the window size
+ * at a time. In such case, break the loop; next call to this
+ * function will continue processing from this moment. */
+
+ break;
+ }
+
+ if(rar->bits.in_addr > rar->cstate.cur_block_size - 1 ||
+ (rar->bits.in_addr == rar->cstate.cur_block_size - 1 &&
+ rar->bits.bit_addr >= bit_size))
+ {
+ /* If the program counter is here, it means the function has
+ * finished processing the block. */
+ rar->cstate.block_parsing_finished = 1;
+ break;
+ }
+
+ /* Decode the next literal. */
+ if(ARCHIVE_OK != decode_number(a, &rar->cstate.ld, p, &num)) {
+ return ARCHIVE_EOF;
+ }
+
+ /* Num holds a decompression literal, or 'command code'.
+ *
+ * - Values lower than 256 are just bytes. Those codes can be stored
+ * in the output buffer directly.
+ *
+ * - Code 256 defines a new filter, which is later used to transform
+ * the data block accordingly to the filter type. The data block
+ * needs to be fully uncompressed first.
+ *
+ * - Code bigger than 257 and smaller than 262 define a repetition
+ * pattern that should be copied from an already uncompressed chunk
+ * of data.
+ */
+
+ if(num < 256) {
+ /* Directly store the byte. */
+
+ int64_t write_idx = rar->cstate.solid_offset +
+ rar->cstate.write_ptr++;
+
+ rar->cstate.window_buf[write_idx & cmask] = (uint8_t) num;
+ continue;
+ } else if(num >= 262) {
+ uint16_t dist_slot;
+ int len = decode_code_length(rar, p, num - 262),
+ dbits,
+ dist = 1;
+
+ if(len == -1) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+ "Failed to decode the code length");
+
+ return ARCHIVE_FATAL;
+ }
+
+ if(ARCHIVE_OK != decode_number(a, &rar->cstate.dd, p, &dist_slot))
+ {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+ "Failed to decode the distance slot");
+
+ return ARCHIVE_FATAL;
+ }
+
+ if(dist_slot < 4) {
+ dbits = 0;
+ dist += dist_slot;
+ } else {
+ dbits = dist_slot / 2 - 1;
+ dist += (2 | (dist_slot & 1)) << dbits;
+ }
+
+ if(dbits > 0) {
+ if(dbits >= 4) {
+ uint32_t add = 0;
+ uint16_t low_dist;
+
+ if(dbits > 4) {
+ if(ARCHIVE_OK != read_bits_32(rar, p, &add)) {
+ /* Return EOF if we can't read more data. */
+ return ARCHIVE_EOF;
+ }
+
+ skip_bits(rar, dbits - 4);
+ add = (add >> (36 - dbits)) << 4;
+ dist += add;
+ }
+
+ if(ARCHIVE_OK != decode_number(a, &rar->cstate.ldd, p,
+ &low_dist))
+ {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_PROGRAMMER,
+ "Failed to decode the distance slot");
+
+ return ARCHIVE_FATAL;
+ }
+
+ dist += low_dist;
+ } else {
+ /* dbits is one of [0,1,2,3] */
+ int add;
+
+ if(ARCHIVE_OK != read_consume_bits(rar, p, dbits, &add)) {
+ /* Return EOF if we can't read more data. */
+ return ARCHIVE_EOF;
+ }
+
+ dist += add;
+ }
+ }
+
+ if(dist > 0x100) {
+ len++;
+
+ if(dist > 0x2000) {
+ len++;
+
+ if(dist > 0x40000) {
+ len++;
+ }
+ }
+ }
+
+ dist_cache_push(rar, dist);
+ rar->cstate.last_len = len;
+
+ if(ARCHIVE_OK != copy_string(a, len, dist))
+ return ARCHIVE_FATAL;
+
+ continue;
+ } else if(num == 256) {
+ /* Create a filter. */
+ ret = parse_filter(a, p);
+ if(ret != ARCHIVE_OK)
+ return ret;
+
+ continue;
+ } else if(num == 257) {
+ if(rar->cstate.last_len != 0) {
+ if(ARCHIVE_OK != copy_string(a, rar->cstate.last_len,
+ rar->cstate.dist_cache[0]))
+ {
+ return ARCHIVE_FATAL;
+ }
+ }
+
+ continue;
+ } else if(num < 262) {
+ const int index = num - 258;
+ const int dist = dist_cache_touch(rar, index);
+
+ uint16_t len_slot;
+ int len;
+
+ if(ARCHIVE_OK != decode_number(a, &rar->cstate.rd, p, &len_slot)) {
+ return ARCHIVE_FATAL;
+ }
+
+ len = decode_code_length(rar, p, len_slot);
+ rar->cstate.last_len = len;
+
+ if(ARCHIVE_OK != copy_string(a, len, dist))
+ return ARCHIVE_FATAL;
+
+ continue;
+ }
+
+ /* The program counter shouldn't reach here. */
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Unsupported block code: 0x%02x", num);
+
+ return ARCHIVE_FATAL;
+ }
+
+ return ARCHIVE_OK;
+}
+
+/* Binary search for the RARv5 signature. */
+static int scan_for_signature(struct archive_read* a) {
+ const uint8_t* p;
+ const int chunk_size = 512;
+ ssize_t i;
+
+ /* If we're here, it means we're on an 'unknown territory' data.
+ * There's no indication what kind of data we're reading here. It could be
+ * some text comment, any kind of binary data, digital sign, dragons, etc.
+ *
+ * We want to find a valid RARv5 magic header inside this unknown data. */
+
+ /* Is it possible in libarchive to just skip everything until the
+ * end of the file? If so, it would be a better approach than the
+ * current implementation of this function. */
+
+ while(1) {
+ if(!read_ahead(a, chunk_size, &p))
+ return ARCHIVE_EOF;
+
+ for(i = 0; i < chunk_size - rar5_signature_size; i++) {
+ if(memcmp(&p[i], rar5_signature, rar5_signature_size) == 0) {
+ /* Consume the number of bytes we've used to search for the
+ * signature, as well as the number of bytes used by the
+ * signature itself. After this we should be standing on a
+ * valid base block header. */
+ (void) consume(a, i + rar5_signature_size);
+ return ARCHIVE_OK;
+ }
+ }
+
+ consume(a, chunk_size);
+ }
+
+ return ARCHIVE_FATAL;
+}
+
+/* This function will switch the multivolume archive file to another file,
+ * i.e. from part03 to part 04. */
+static int advance_multivolume(struct archive_read* a) {
+ int lret;
+ struct rar5* rar = get_context(a);
+
+ /* A small state machine that will skip unnecessary data, needed to
+ * switch from one multivolume to another. Such skipping is needed if
+ * we want to be an stream-oriented (instead of file-oriented)
+ * unpacker.
+ *
+ * The state machine starts with `rar->main.endarc` == 0. It also
+ * assumes that current stream pointer points to some base block header.
+ *
+ * The `endarc` field is being set when the base block parsing function
+ * encounters the 'end of archive' marker.
+ */
+
+ while(1) {
+ if(rar->main.endarc == 1) {
+ rar->main.endarc = 0;
+ while(ARCHIVE_RETRY == skip_base_block(a));
+ break;
+ } else {
+ /* Skip current base block. In order to properly skip it,
+ * we really need to simply parse it and discard the results. */
+
+ lret = skip_base_block(a);
+
+ /* The `skip_base_block` function tells us if we should continue
+ * with skipping, or we should stop skipping. We're trying to skip
+ * everything up to a base FILE block. */
+
+ if(lret != ARCHIVE_RETRY) {
+ /* If there was an error during skipping, or we have just
+ * skipped a FILE base block... */
+
+ if(rar->main.endarc == 0) {
+ return lret;
+ } else {
+ continue;
+ }
+ }
+ }
+ }
+
+ return ARCHIVE_OK;
+}
+
+/* Merges the partial block from the first multivolume archive file, and
+ * partial block from the second multivolume archive file. The result is
+ * a chunk of memory containing the whole block, and the stream pointer
+ * is advanced to the next block in the second multivolume archive file. */
+static int merge_block(struct archive_read* a, ssize_t block_size,
+ const uint8_t** p)
+{
+ struct rar5* rar = get_context(a);
+ ssize_t cur_block_size, partial_offset = 0;
+ const uint8_t* lp;
+ int ret;
+
+ /* Set a flag that we're in the switching mode. */
+ rar->cstate.switch_multivolume = 1;
+
+ /* Reallocate the memory which will hold the whole block. */
+ if(rar->vol.push_buf)
+ free((void*) rar->vol.push_buf);
+
+ rar->vol.push_buf = malloc(block_size);
+ if(!rar->vol.push_buf) {
+ archive_set_error(&a->archive, ENOMEM, "Can't allocate memory for a "
+ "merge block buffer.");
+ return ARCHIVE_FATAL;
+ }
+
+ /* A single block can span across multiple multivolume archive files,
+ * so we use a loop here. This loop will consume enough multivolume
+ * archive files until the whole block is read. */
+
+ while(1) {
+ /* Get the size of current block chunk in this multivolume archive
+ * file and read it. */
+ cur_block_size =
+ rar5_min(rar->file.bytes_remaining, block_size - partial_offset);
+
+ if(!read_ahead(a, cur_block_size, &lp))
+ return ARCHIVE_EOF;
+
+ /* Sanity check; there should never be a situation where this function
+ * reads more data than the block's size. */
+ if(partial_offset + cur_block_size > block_size) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+ "Consumed too much data when merging blocks.");
+ return ARCHIVE_FATAL;
+ }
+
+ /* Merge previous block chunk with current block chunk, or create
+ * first block chunk if this is our first iteration. */
+ memcpy(&rar->vol.push_buf[partial_offset], lp, cur_block_size);
+
+ /* Advance the stream read pointer by this block chunk size. */
+ if(ARCHIVE_OK != consume(a, cur_block_size))
+ return ARCHIVE_EOF;
+
+ /* Update the pointers. `partial_offset` contains information about
+ * the sum of merged block chunks. */
+ partial_offset += cur_block_size;
+ rar->file.bytes_remaining -= cur_block_size;
+
+ /* If `partial_offset` is the same as `block_size`, this means we've
+ * merged all block chunks and we have a valid full block. */
+ if(partial_offset == block_size) {
+ break;
+ }
+
+ /* If we don't have any bytes to read, this means we should switch
+ * to another multivolume archive file. */
+ if(rar->file.bytes_remaining == 0) {
+ ret = advance_multivolume(a);
+ if(ret != ARCHIVE_OK)
+ return ret;
+ }
+ }
+
+ *p = rar->vol.push_buf;
+
+ /* If we're here, we can resume unpacking by processing the block pointed
+ * to by the `*p` memory pointer. */
+
+ return ARCHIVE_OK;
+}
+
+static int process_block(struct archive_read* a) {
+ const uint8_t* p;
+ struct rar5* rar = get_context(a);
+ int ret;
+
+ /* If we don't have any data to be processed, this most probably means
+ * we need to switch to the next volume. */
+ if(rar->main.volume && rar->file.bytes_remaining == 0) {
+ ret = advance_multivolume(a);
+ if(ret != ARCHIVE_OK)
+ return ret;
+ }
+
+ if(rar->cstate.block_parsing_finished) {
+ ssize_t block_size;
+
+ rar->cstate.block_parsing_finished = 0;
+
+ /* The header size won't be bigger than 6 bytes. */
+ if(!read_ahead(a, 6, &p)) {
+ /* Failed to prefetch data block header. */
+ return ARCHIVE_EOF;
+ }
+
+ /*
+ * Read block_size by parsing block header. Validate the header by
+ * calculating CRC byte stored inside the header. Size of the header is
+ * not constant (block size can be stored either in 1 or 2 bytes),
+ * that's why block size is left out from the `compressed_block_header`
+ * structure and returned by `parse_block_header` as the second
+ * argument. */
+
+ ret = parse_block_header(a, p, &block_size, &rar->last_block_hdr);
+ if(ret != ARCHIVE_OK)
+ return ret;
+
+ /* Skip block header. Next data is huffman tables, if present. */
+ ssize_t to_skip = sizeof(struct compressed_block_header) +
+ rar->last_block_hdr.block_flags.byte_count + 1;
+
+ if(ARCHIVE_OK != consume(a, to_skip))
+ return ARCHIVE_EOF;
+
+ rar->file.bytes_remaining -= to_skip;
+
+ /* The block size gives information about the whole block size, but
+ * the block could be stored in split form when using multi-volume
+ * archives. In this case, the block size will be bigger than the
+ * actual data stored in this file. Remaining part of the data will
+ * be in another file. */
+
+ ssize_t cur_block_size =
+ rar5_min(rar->file.bytes_remaining, block_size);
+
+ if(block_size > rar->file.bytes_remaining) {
+ /* If current blocks' size is bigger than our data size, this
+ * means we have a multivolume archive. In this case, skip
+ * all base headers until the end of the file, proceed to next
+ * "partXXX.rar" volume, find its signature, skip all headers up
+ * to the first FILE base header, and continue from there.
+ *
+ * Note that `merge_block` will update the `rar` context structure
+ * quite extensively. */
+
+ ret = merge_block(a, block_size, &p);
+ if(ret != ARCHIVE_OK) {
+ return ret;
+ }
+
+ cur_block_size = block_size;
+
+ /* Current stream pointer should be now directly *after* the
+ * block that spanned through multiple archive files. `p` pointer
+ * should have the data of the *whole* block (merged from
+ * partial blocks stored in multiple archives files). */
+ } else {
+ rar->cstate.switch_multivolume = 0;
+
+ /* Read the whole block size into memory. This can take up to
+ * 8 megabytes of memory in theoretical cases. Might be worth to
+ * optimize this and use a standard chunk of 4kb's. */
+
+ if(!read_ahead(a, 4 + cur_block_size, &p)) {
+ /* Failed to prefetch block data. */
+ return ARCHIVE_EOF;
+ }
+ }
+
+ rar->cstate.block_buf = p;
+ rar->cstate.cur_block_size = cur_block_size;
+
+ rar->bits.in_addr = 0;
+ rar->bits.bit_addr = 0;
+
+ if(rar->last_block_hdr.block_flags.is_table_present) {
+ /* Load Huffman tables. */
+ ret = parse_tables(a, rar, p);
+ if(ret != ARCHIVE_OK) {
+ /* Error during decompression of Huffman tables. */
+ return ret;
+ }
+ }
+ } else {
+ p = rar->cstate.block_buf;
+ }
+
+ /* Uncompress the block, or a part of it, depending on how many bytes
+ * will be generated by uncompressing the block.
+ *
+ * In case too many bytes will be generated, calling this function again
+ * will resume the uncompression operation. */
+ ret = do_uncompress_block(a, p);
+ if(ret != ARCHIVE_OK) {
+ return ret;
+ }
+
+ if(rar->cstate.block_parsing_finished &&
+ rar->cstate.switch_multivolume == 0 &&
+ rar->cstate.cur_block_size > 0)
+ {
+ /* If we're processing a normal block, consume the whole block. We
+ * can do this because we've already read the whole block to memory.
+ */
+ if(ARCHIVE_OK != consume(a, rar->cstate.cur_block_size))
+ return ARCHIVE_FATAL;
+
+ rar->file.bytes_remaining -= rar->cstate.cur_block_size;
+ } else if(rar->cstate.switch_multivolume) {
+ /* Don't consume the block if we're doing multivolume processing.
+ * The volume switching function will consume the proper count of
+ * bytes instead. */
+
+ rar->cstate.switch_multivolume = 0;
+ }
+
+ return ARCHIVE_OK;
+}
+
+/* Pops the `buf`, `size` and `offset` from the "data ready" stack.
+ *
+ * Returns ARCHIVE_OK when those arguments can be used, ARCHIVE_RETRY
+ * when there is no data on the stack. */
+static int use_data(struct rar5* rar, const void** buf, size_t* size,
+ int64_t* offset)
+{
+ int i;
+
+ for(i = 0; i < rar5_countof(rar->cstate.dready); i++) {
+ struct data_ready *d = &rar->cstate.dready[i];
+
+ if(d->used) {
+ if(buf) *buf = d->buf;
+ if(size) *size = d->size;
+ if(offset) *offset = d->offset;
+
+ d->used = 0;
+ return ARCHIVE_OK;
+ }
+ }
+
+ return ARCHIVE_RETRY;
+}
+
+/* Pushes the `buf`, `size` and `offset` arguments to the rar->cstate.dready
+ * FIFO stack. Those values will be popped from this stack by the `use_data`
+ * function. */
+static int push_data_ready(struct archive_read* a, struct rar5* rar,
+ const uint8_t* buf, size_t size, int64_t offset)
+{
+ int i;
+
+ /* Don't push if we're in skip mode. This is needed because solid
+ * streams need full processing even if we're skipping data. After fully
+ * processing the stream, we need to discard the generated bytes, because
+ * we're interested only in the side effect: building up the internal
+ * window circular buffer. This window buffer will be used later during
+ * unpacking of requested data. */
+ if(rar->skip_mode)
+ return ARCHIVE_OK;
+
+ /* Sanity check. */
+ if(offset != rar->file.last_offset + rar->file.last_size) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, "Sanity "
+ "check error: output stream is not continuous");
+ return ARCHIVE_FATAL;
+ }
+
+ for(i = 0; i < rar5_countof(rar->cstate.dready); i++) {
+ struct data_ready* d = &rar->cstate.dready[i];
+ if(!d->used) {
+ d->used = 1;
+ d->buf = buf;
+ d->size = size;
+ d->offset = offset;
+
+ /* These fields are used only in sanity checking. */
+ rar->file.last_offset = offset;
+ rar->file.last_size = size;
+
+ /* Calculate the checksum of this new block before submitting
+ * data to libarchive's engine. */
+ update_crc(rar, d->buf, d->size);
+
+ return ARCHIVE_OK;
+ }
+ }
+
+ /* Program counter will reach this code if the `rar->cstate.data_ready`
+ * stack will be filled up so that no new entries will be allowed. The
+ * code shouldn't allow such situation to occur. So we treat this case
+ * as an internal error. */
+
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, "Error: "
+ "premature end of data_ready stack");
+ return ARCHIVE_FATAL;
+}
+
+/* This function uncompresses the data that is stored in the <FILE> base
+ * block.
+ *
+ * The FILE base block looks like this:
+ *
+ * <header><huffman tables><block_1><block_2>...<block_n>
+ *
+ * The <header> is a block header, that is parsed in parse_block_header().
+ * It's a "compressed_block_header" structure, containing metadata needed
+ * to know when we should stop looking for more <block_n> blocks.
+ *
+ * <huffman tables> contain data needed to set up the huffman tables, needed
+ * for the actual decompression.
+ *
+ * Each <block_n> consists of series of literals:
+ *
+ * <literal><literal><literal>...<literal>
+ *
+ * Those literals generate the uncompression data. They operate on a circular
+ * buffer, sometimes writing raw data into it, sometimes referencing
+ * some previous data inside this buffer, and sometimes declaring a filter
+ * that will need to be executed on the data stored in the circular buffer.
+ * It all depends on the literal that is used.
+ *
+ * Sometimes blocks produce output data, sometimes they don't. For example, for
+ * some huge files that use lots of filters, sometimes a block is filled with
+ * only filter declaration literals. Such blocks won't produce any data in the
+ * circular buffer.
+ *
+ * Sometimes blocks will produce 4 bytes of data, and sometimes 1 megabyte,
+ * because a literal can reference previously decompressed data. For example,
+ * there can be a literal that says: 'append a byte 0xFE here', and after
+ * it another literal can say 'append 1 megabyte of data from circular buffer
+ * offset 0x12345'. This is how RAR format handles compressing repeated
+ * patterns.
+ *
+ * The RAR compressor creates those literals and the actual efficiency of
+ * compression depends on what those literals are. The literals can also
+ * be seen as a kind of a non-turing-complete virtual machine that simply
+ * tells the decompressor what it should do.
+ * */
+
+static int do_uncompress_file(struct archive_read* a) {
+ struct rar5* rar = get_context(a);
+ int ret;
+ int64_t max_end_pos;
+
+ if(!rar->cstate.initialized) {
+ /* Don't perform full context reinitialization if we're processing
+ * a solid archive. */
+ if(!rar->main.solid || !rar->cstate.window_buf) {
+ init_unpack(rar);
+ }
+
+ rar->cstate.initialized = 1;
+ }
+
+ if(rar->cstate.all_filters_applied == 1) {
+ /* We use while(1) here, but standard case allows for just 1 iteration.
+ * The loop will iterate if process_block() didn't generate any data at
+ * all. This can happen if the block contains only filter definitions
+ * (this is common in big files). */
+
+ while(1) {
+ ret = process_block(a);
+ if(ret == ARCHIVE_EOF || ret == ARCHIVE_FATAL)
+ return ret;
+
+ if(rar->cstate.last_write_ptr == rar->cstate.write_ptr) {
+ /* The block didn't generate any new data, so just process
+ * a new block. */
+ continue;
+ }
+
+ /* The block has generated some new data, so break the loop. */
+ break;
+ }
+ }
+
+ /* Try to run filters. If filters won't be applied, it means that
+ * insufficient data was generated. */
+ ret = apply_filters(a);
+ if(ret == ARCHIVE_RETRY) {
+ return ARCHIVE_OK;
+ } else if(ret == ARCHIVE_FATAL) {
+ return ARCHIVE_FATAL;
+ }
+
+ /* If apply_filters() will return ARCHIVE_OK, we can continue here. */
+
+ if(cdeque_size(&rar->cstate.filters) > 0) {
+ /* Check if we can write something before hitting first filter. */
+ struct filter_info* flt;
+
+ /* Get the block_start offset from the first filter. */
+ if(CDE_OK != cdeque_front(&rar->cstate.filters, cdeque_filter_p(&flt)))
+ {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+ "Can't read first filter");
+ return ARCHIVE_FATAL;
+ }
+
+ max_end_pos = rar5_min(flt->block_start, rar->cstate.write_ptr);
+ } else {
+ /* There are no filters defined, or all filters were applied. This
+ * means we can just store the data without any postprocessing. */
+ max_end_pos = rar->cstate.write_ptr;
+ }
+
+ if(max_end_pos == rar->cstate.last_write_ptr) {
+ /* We can't write anything yet. The block uncompression function did
+ * not generate enough data, and no filter can be applied. At the same
+ * time we don't have any data that can be stored without filter
+ * postprocessing. This means we need to wait for more data to be
+ * generated, so we can apply the filters.
+ *
+ * Signal the caller that we need more data to be able to do anything.
+ */
+ return ARCHIVE_RETRY;
+ } else {
+ /* We can write the data before hitting the first filter. So let's
+ * do it. The push_window_data() function will effectively return
+ * the selected data block to the user application. */
+ push_window_data(a, rar, rar->cstate.last_write_ptr, max_end_pos);
+ rar->cstate.last_write_ptr = max_end_pos;
+ }
+
+ return ARCHIVE_OK;
+}
+
+static int uncompress_file(struct archive_read* a) {
+ int ret;
+
+ while(1) {
+ /* Sometimes the uncompression function will return a 'retry' signal.
+ * If this will happen, we have to retry the function. */
+ ret = do_uncompress_file(a);
+ if(ret != ARCHIVE_RETRY)
+ return ret;
+ }
+}
+
+
+static int do_unstore_file(struct archive_read* a,
+ struct rar5* rar,
+ const void** buf,
+ size_t* size,
+ int64_t* offset)
+{
+ const uint8_t* p;
+
+ if(rar->file.bytes_remaining == 0 && rar->main.volume > 0 &&
+ rar->generic.split_after > 0)
+ {
+ int ret;
+
+ rar->cstate.switch_multivolume = 1;
+ ret = advance_multivolume(a);
+ rar->cstate.switch_multivolume = 0;
+
+ if(ret != ARCHIVE_OK) {
+ /* Failed to advance to next multivolume archive file. */
+ return ret;
+ }
+ }
+
+ size_t to_read = rar5_min(rar->file.bytes_remaining, 64 * 1024);
+
+ if(!read_ahead(a, to_read, &p)) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "I/O error "
+ "when unstoring file");
+ return ARCHIVE_FATAL;
+ }
+
+ if(ARCHIVE_OK != consume(a, to_read)) {
+ return ARCHIVE_EOF;
+ }
+
+ if(buf) *buf = p;
+ if(size) *size = to_read;
+ if(offset) *offset = rar->cstate.last_unstore_ptr;
+
+ rar->file.bytes_remaining -= to_read;
+ rar->cstate.last_unstore_ptr += to_read;
+
+ update_crc(rar, p, to_read);
+ return ARCHIVE_OK;
+}
+
+static int do_unpack(struct archive_read* a, struct rar5* rar,
+ const void** buf, size_t* size, int64_t* offset)
+{
+ enum COMPRESSION_METHOD {
+ STORE = 0, FASTEST = 1, FAST = 2, NORMAL = 3, GOOD = 4, BEST = 5
+ };
+
+ if(rar->file.service > 0) {
+ return do_unstore_file(a, rar, buf, size, offset);
+ } else {
+ switch(rar->cstate.method) {
+ case STORE:
+ return do_unstore_file(a, rar, buf, size, offset);
+ case FASTEST:
+ /* fallthrough */
+ case FAST:
+ /* fallthrough */
+ case NORMAL:
+ /* fallthrough */
+ case GOOD:
+ /* fallthrough */
+ case BEST:
+ return uncompress_file(a);
+ default:
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Compression method not supported: 0x%08x",
+ rar->cstate.method);
+
+ return ARCHIVE_FATAL;
+ }
+ }
+
+#if !defined WIN32
+ /* Not reached. */
+ return ARCHIVE_OK;
+#endif
+}
+
+static int verify_checksums(struct archive_read* a) {
+ int verify_crc;
+ struct rar5* rar = get_context(a);
+
+ /* Check checksums only when actually unpacking the data. There's no need
+ * to calculate checksum when we're skipping data in solid archives
+ * (skipping in solid archives is the same thing as unpacking compressed
+ * data and discarding the result). */
+
+ if(!rar->skip_mode) {
+ /* Always check checkums if we're not in skip mode */
+ verify_crc = 1;
+ } else {
+ /* We can override the logic above with a compile-time option
+ * NO_CRC_ON_SOLID_SKIP. This option is used during debugging, and it
+ * will check checksums of unpacked data even when we're skipping it.
+ */
+
+#if defined CHECK_CRC_ON_SOLID_SKIP
+ /* Debug case */
+ verify_crc = 1;
+#else
+ /* Normal case */
+ verify_crc = 0;
+#endif
+ }
+
+ if(verify_crc) {
+ /* During unpacking, on each unpacked block we're calling the
+ * update_crc() function. Since we are here, the unpacking process is
+ * already over and we can check if calculated checksum (CRC32 or
+ * BLAKE2sp) is the same as what is stored in the archive.
+ */
+ if(rar->file.stored_crc32 > 0) {
+ /* Check CRC32 only when the file contains a CRC32 value for this
+ * file. */
+
+ if(rar->file.calculated_crc32 != rar->file.stored_crc32) {
+ /* Checksums do not match; the unpacked file is corrupted. */
+
+ DEBUG_CODE {
+ printf("Checksum error: CRC32 (was: %08x, expected: %08x)\n",
+ rar->file.calculated_crc32, rar->file.stored_crc32);
+ }
+
+#ifndef DONT_FAIL_ON_CRC_ERROR
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Checksum error: CRC32");
+ return ARCHIVE_FATAL;
+#endif
+ } else {
+ DEBUG_CODE {
+ printf("Checksum OK: CRC32 (%08x/%08x)\n",
+ rar->file.stored_crc32,
+ rar->file.calculated_crc32);
+ }
+ }
+ }
+
+ if(rar->file.has_blake2 > 0) {
+ /* BLAKE2sp is an optional checksum algorithm that is added to
+ * RARv5 archives when using the `-htb` switch during creation of
+ * archive.
+ *
+ * We now finalize the hash calculation by calling the `final`
+ * function. This will generate the final hash value we can use to
+ * compare it with the BLAKE2sp checksum that is stored in the
+ * archive.
+ *
+ * The return value of this `final` function is not very helpful,
+ * as it guards only against improper use. This is why we're
+ * explicitly ignoring it. */
+
+ uint8_t b2_buf[32];
+ (void) blake2sp_final(&rar->file.b2state, b2_buf, 32);
+
+ if(memcmp(&rar->file.blake2sp, b2_buf, 32) != 0) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Checksum error: BLAKE2");
+
+ return ARCHIVE_FATAL;
+#endif
+ }
+ }
+ }
+
+ /* Finalization for this file has been successfully completed. */
+ return ARCHIVE_OK;
+}
+
+static int verify_global_checksums(struct archive_read* a) {
+ return verify_checksums(a);
+}
+
+static int rar5_read_data(struct archive_read *a, const void **buff,
+ size_t *size, int64_t *offset) {
+ int ret;
+ struct rar5* rar = get_context(a);
+
+ if(!rar->skip_mode && (rar->cstate.last_write_ptr > rar->file.unpacked_size)) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+ "Unpacker has written too many bytes");
+ return ARCHIVE_FATAL;
+ }
+
+ ret = use_data(rar, buff, size, offset);
+ if(ret == ARCHIVE_OK)
+ return ret;
+
+ ret = do_unpack(a, rar, buff, size, offset);
+ if(ret != ARCHIVE_OK) {
+ return ret;
+ }
+
+ if(rar->file.bytes_remaining == 0 &&
+ rar->cstate.last_write_ptr == rar->file.unpacked_size)
+ {
+ /* If all bytes of current file were processed, run finalization.
+ *
+ * Finalization will check checksum against proper values. If
+ * some of the checksums will not match, we'll return an error
+ * value in the last `archive_read_data` call to signal an error
+ * to the user. */
+
+ return verify_global_checksums(a);
+ }
+
+ return ARCHIVE_OK;
+}
+
+static int rar5_read_data_skip(struct archive_read *a) {
+ struct rar5* rar = get_context(a);
+
+ if(rar->main.solid) {
+ /* In solid archives, instead of skipping the data, we need to extract
+ * it, and dispose the result. The side effect of this operation will
+ * be setting up the initial window buffer state needed to be able to
+ * extract the selected file. */
+
+ int ret;
+
+ /* Make sure to process all blocks in the compressed stream. */
+ while(rar->file.bytes_remaining > 0) {
+ /* Setting the "skip mode" will allow us to skip checksum checks
+ * during data skipping. Checking the checksum of skipped data
+ * isn't really necessary and it's only slowing things down.
+ *
+ * This is incremented instead of setting to 1 because this data
+ * skipping function can be called recursively. */
+ rar->skip_mode++;
+
+ /* We're disposing 1 block of data, so we use triple NULLs in
+ * arguments.
+ */
+ ret = rar5_read_data(a, NULL, NULL, NULL);
+
+ /* Turn off "skip mode". */
+ rar->skip_mode--;
+
+ if(ret < 0) {
+ /* Propagate any potential error conditions to the caller. */
+ return ret;
+ }
+ }
+ } else {
+ /* In standard archives, we can just jump over the compressed stream.
+ * Each file in non-solid archives starts from an empty window buffer.
+ */
+
+ if(ARCHIVE_OK != consume(a, rar->file.bytes_remaining)) {
+ return ARCHIVE_FATAL;
+ }
+
+ rar->file.bytes_remaining = 0;
+ }
+
+ return ARCHIVE_OK;
+}
+
+static int64_t rar5_seek_data(struct archive_read *a, int64_t offset,
+ int whence)
+{
+ (void) a;
+ (void) offset;
+ (void) whence;
+
+ /* We're a streaming unpacker, and we don't support seeking. */
+
+ return ARCHIVE_FATAL;
+}
+
+static int rar5_cleanup(struct archive_read *a) {
+ struct rar5* rar = get_context(a);
+
+ if(rar->cstate.window_buf)
+ free(rar->cstate.window_buf);
+
+ if(rar->cstate.filtered_buf)
+ free(rar->cstate.filtered_buf);
+
+ if(rar->vol.push_buf)
+ free(rar->vol.push_buf);
+
+ free_filters(rar);
+ cdeque_free(&rar->cstate.filters);
+
+ free(rar);
+ a->format->data = NULL;
+
+ return ARCHIVE_OK;
+}
+
+static int rar5_capabilities(struct archive_read * a) {
+ (void) a;
+ return 0;
+}
+
+static int rar5_has_encrypted_entries(struct archive_read *_a) {
+ (void) _a;
+
+ /* Unsupported for now. */
+ return ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED;
+}
+
+static int rar5_init(struct rar5* rar) {
+ ssize_t i;
+
+ memset(rar, 0, sizeof(struct rar5));
+
+ /* Decrypt the magic signature pattern. Check the comment near the
+ * `rar5_signature` symbol to read the rationale behind this. */
+
+ if(rar5_signature[0] == 243) {
+ for(i = 0; i < rar5_signature_size; i++) {
+ rar5_signature[i] ^= 0xA1;
+ }
+ }
+
+ if(CDE_OK != cdeque_init(&rar->cstate.filters, 8192))
+ return ARCHIVE_FATAL;
+
+ return ARCHIVE_OK;
+}
+
+int archive_read_support_format_rar5(struct archive *_a) {
+ struct archive_read* ar;
+ int ret;
+ struct rar5* rar;
+
+ if(ARCHIVE_OK != (ret = get_archive_read(_a, &ar)))
+ return ret;
+
+ rar = malloc(sizeof(*rar));
+ if(rar == NULL) {
+ archive_set_error(&ar->archive, ENOMEM, "Can't allocate rar5 data");
+ return ARCHIVE_FATAL;
+ }
+
+ if(ARCHIVE_OK != rar5_init(rar)) {
+ archive_set_error(&ar->archive, ENOMEM, "Can't allocate rar5 filter "
+ "buffer");
+ return ARCHIVE_FATAL;
+ }
+
+ ret = __archive_read_register_format(ar,
+ rar,
+ "rar5",
+ rar5_bid,
+ rar5_options,
+ rar5_read_header,
+ rar5_read_data,
+ rar5_read_data_skip,
+ rar5_seek_data,
+ rar5_cleanup,
+ rar5_capabilities,
+ rar5_has_encrypted_entries);
+
+ if(ret != ARCHIVE_OK) {
+ (void) rar5_cleanup(ar);
+ }
+
+ return ret;
+}
diff --git a/libarchive/archive_read_support_format_xar.c b/libarchive/archive_read_support_format_xar.c
index 602fc7722144..c4dd915a2c0e 100644
--- a/libarchive/archive_read_support_format_xar.c
+++ b/libarchive/archive_read_support_format_xar.c
@@ -167,6 +167,9 @@ struct xar_file {
#define HAS_FFLAGS 0x01000
#define HAS_XATTR 0x02000
#define HAS_ACL 0x04000
+#define HAS_CTIME 0x08000
+#define HAS_MTIME 0x10000
+#define HAS_ATIME 0x20000
uint64_t id;
uint64_t length;
@@ -695,9 +698,15 @@ xar_read_header(struct archive_read *a, struct archive_entry *entry)
*/
file_free(file);
}
- archive_entry_set_atime(entry, file->atime, 0);
- archive_entry_set_ctime(entry, file->ctime, 0);
- archive_entry_set_mtime(entry, file->mtime, 0);
+ if (file->has & HAS_ATIME) {
+ archive_entry_set_atime(entry, file->atime, 0);
+ }
+ if (file->has & HAS_CTIME) {
+ archive_entry_set_ctime(entry, file->ctime, 0);
+ }
+ if (file->has & HAS_MTIME) {
+ archive_entry_set_mtime(entry, file->mtime, 0);
+ }
archive_entry_set_gid(entry, file->gid);
if (file->gname.length > 0 &&
archive_entry_copy_gname_l(entry, file->gname.s,
@@ -967,7 +976,7 @@ move_reading_point(struct archive_read *a, uint64_t offset)
return ((int)step);
xar->offset += step;
} else {
- int64_t pos = __archive_read_seek(a, offset, SEEK_SET);
+ int64_t pos = __archive_read_seek(a, xar->h_base + offset, SEEK_SET);
if (pos == ARCHIVE_FAILED) {
archive_set_error(&(a->archive),
ARCHIVE_ERRNO_MISC,
@@ -1767,8 +1776,8 @@ file_new(struct archive_read *a, struct xar *xar, struct xmlattr_list *list)
}
file->parent = xar->file;
file->mode = 0777 | AE_IFREG;
- file->atime = time(NULL);
- file->mtime = time(NULL);
+ file->atime = 0;
+ file->mtime = 0;
xar->file = file;
xar->xattr = NULL;
for (attr = list->first; attr != NULL; attr = attr->next) {
@@ -2751,15 +2760,15 @@ xml_data(void *userData, const char *s, int len)
xar->file->uid = atol10(s, len);
break;
case FILE_CTIME:
- xar->file->has |= HAS_TIME;
+ xar->file->has |= HAS_TIME | HAS_CTIME;
xar->file->ctime = parse_time(s, len);
break;
case FILE_MTIME:
- xar->file->has |= HAS_TIME;
+ xar->file->has |= HAS_TIME | HAS_MTIME;
xar->file->mtime = parse_time(s, len);
break;
case FILE_ATIME:
- xar->file->has |= HAS_TIME;
+ xar->file->has |= HAS_TIME | HAS_ATIME;
xar->file->atime = parse_time(s, len);
break;
case FILE_DATA_LENGTH:
diff --git a/libarchive/archive_write_set_format_gnutar.c b/libarchive/archive_write_set_format_gnutar.c
index 2d858c9f752c..1966c53fff14 100644
--- a/libarchive/archive_write_set_format_gnutar.c
+++ b/libarchive/archive_write_set_format_gnutar.c
@@ -339,7 +339,7 @@ archive_write_gnutar_header(struct archive_write *a,
* case getting WCS failed. On POSIX, this is a
* normal operation.
*/
- if (p != NULL && p[strlen(p) - 1] != '/') {
+ if (p != NULL && p[0] != '\0' && p[strlen(p) - 1] != '/') {
struct archive_string as;
archive_string_init(&as);
diff --git a/libarchive/archive_write_set_format_pax.c b/libarchive/archive_write_set_format_pax.c
index 3cebeae187dc..6f78c48bd651 100644
--- a/libarchive/archive_write_set_format_pax.c
+++ b/libarchive/archive_write_set_format_pax.c
@@ -660,7 +660,7 @@ archive_write_pax_header(struct archive_write *a,
* case getting WCS failed. On POSIX, this is a
* normal operation.
*/
- if (p != NULL && p[strlen(p) - 1] != '/') {
+ if (p != NULL && p[0] != '\0' && p[strlen(p) - 1] != '/') {
struct archive_string as;
archive_string_init(&as);
diff --git a/libarchive/archive_write_set_format_v7tar.c b/libarchive/archive_write_set_format_v7tar.c
index 62b15229444c..53c0db0e2041 100644
--- a/libarchive/archive_write_set_format_v7tar.c
+++ b/libarchive/archive_write_set_format_v7tar.c
@@ -284,7 +284,7 @@ archive_write_v7tar_header(struct archive_write *a, struct archive_entry *entry)
* case getting WCS failed. On POSIX, this is a
* normal operation.
*/
- if (p != NULL && p[strlen(p) - 1] != '/') {
+ if (p != NULL && p[0] != '\0' && p[strlen(p) - 1] != '/') {
struct archive_string as;
archive_string_init(&as);
diff --git a/libarchive/test/CMakeLists.txt b/libarchive/test/CMakeLists.txt
index 3bc8b775263e..3927748576c6 100644
--- a/libarchive/test/CMakeLists.txt
+++ b/libarchive/test/CMakeLists.txt
@@ -150,6 +150,7 @@ IF(ENABLE_TEST)
test_read_format_rar_encryption_header.c
test_read_format_rar_encryption_partially.c
test_read_format_rar_invalid1.c
+ test_read_format_rar5.c
test_read_format_raw.c
test_read_format_tar.c
test_read_format_tar_concatenated.c
diff --git a/libarchive/test/test_read_format_rar5.c b/libarchive/test/test_read_format_rar5.c
new file mode 100644
index 000000000000..2196123ddbc5
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5.c
@@ -0,0 +1,728 @@
+/*-
+ * Copyright (c) 2018 Grzegorz Antoniak
+ * 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.
+ */
+#include "test.h"
+
+/* Some tests will want to calculate some CRC32's, and this header can
+ * help. */
+#define __LIBARCHIVE_BUILD
+#include <archive_crc32.h>
+
+#define PROLOGUE(reffile) \
+ struct archive_entry *ae; \
+ struct archive *a; \
+ \
+ (void) a; /* Make the compiler happy if we won't use this variables */ \
+ (void) ae; /* in the test cases. */ \
+ \
+ extract_reference_file(reffile); \
+ assert((a = archive_read_new()) != NULL); \
+ assertA(0 == archive_read_support_filter_all(a)); \
+ assertA(0 == archive_read_support_format_all(a)); \
+ assertA(0 == archive_read_open_filename(a, reffile, 10240))
+
+#define PROLOGUE_MULTI(reffile) \
+ struct archive_entry *ae; \
+ struct archive *a; \
+ \
+ (void) a; \
+ (void) ae; \
+ \
+ extract_reference_files(reffile); \
+ assert((a = archive_read_new()) != NULL); \
+ assertA(0 == archive_read_support_filter_all(a)); \
+ assertA(0 == archive_read_support_format_all(a)); \
+ assertA(0 == archive_read_open_filenames(a, reffile, 10240))
+
+
+#define EPILOGUE() \
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); \
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a))
+
+static
+int verify_data(const uint8_t* data_ptr, int magic, int size) {
+ int i = 0;
+
+ /* This is how the test data inside test files was generated;
+ * we are re-generating it here and we check if our re-generated
+ * test data is the same as in the test file. If this test is
+ * failing it's either because there's a bug in the test case,
+ * or the unpacked data is corrupted. */
+
+ for(i = 0; i < size / 4; ++i) {
+ const int k = i + 1;
+ const signed int* lptr = (const signed int*) &data_ptr[i * 4];
+ signed int val = k * k - 3 * k + (1 + magic);
+
+ if(val < 0)
+ val = 0;
+
+ /* *lptr is a value inside unpacked test file, val is the
+ * value that should be in the unpacked test file. */
+
+ if(*lptr != val)
+ return 0;
+ }
+
+ return 1;
+}
+
+static
+int extract_one(struct archive* a, struct archive_entry* ae, uint32_t crc) {
+ la_ssize_t fsize, read;
+ uint8_t* buf;
+ int ret = 1;
+ uint32_t computed_crc;
+
+ fsize = archive_entry_size(ae);
+ buf = malloc(fsize);
+ if(buf == NULL)
+ return 1;
+
+ read = archive_read_data(a, buf, fsize);
+ if(read != fsize) {
+ assertEqualInt(read, fsize);
+ goto fn_exit;
+ }
+
+ computed_crc = crc32(0, buf, fsize);
+ assertEqualInt(computed_crc, crc);
+ ret = 0;
+
+fn_exit:
+ free(buf);
+ return ret;
+}
+
+DEFINE_TEST(test_read_format_rar5_stored)
+{
+ const char helloworld_txt[] = "hello libarchive test suite!\n";
+ la_ssize_t file_size = sizeof(helloworld_txt) - 1;
+ char buff[64];
+
+ PROLOGUE("test_read_format_rar5_stored.rar");
+
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("helloworld.txt", archive_entry_pathname(ae));
+ assertA((int) archive_entry_mtime(ae) > 0);
+ assertA((int) archive_entry_ctime(ae) == 0);
+ assertA((int) archive_entry_atime(ae) == 0);
+ assertEqualInt(file_size, archive_entry_size(ae));
+ assertEqualInt(33188, archive_entry_mode(ae));
+ assertA(file_size == archive_read_data(a, buff, file_size));
+ assertEqualMem(buff, helloworld_txt, file_size);
+ assertEqualInt(archive_entry_is_encrypted(ae), 0);
+
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_compressed)
+{
+ const int DATA_SIZE = 1200;
+ uint8_t buff[DATA_SIZE];
+
+ PROLOGUE("test_read_format_rar5_compressed.rar");
+
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA((int) archive_entry_mtime(ae) > 0);
+ assertEqualInt(DATA_SIZE, archive_entry_size(ae));
+ assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ verify_data(buff, 0, DATA_SIZE);
+
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_multiple_files)
+{
+ const int DATA_SIZE = 4096;
+ uint8_t buff[DATA_SIZE];
+
+ PROLOGUE("test_read_format_rar5_multiple_files.rar");
+
+ /* There should be 4 files inside this test file. Check for their
+ * existence, and also check the contents of those test files. */
+
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test1.bin", archive_entry_pathname(ae));
+ assertEqualInt(DATA_SIZE, archive_entry_size(ae));
+ assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
+ assertA(verify_data(buff, 1, DATA_SIZE));
+
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test2.bin", archive_entry_pathname(ae));
+ assertEqualInt(DATA_SIZE, archive_entry_size(ae));
+ assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
+ assertA(verify_data(buff, 2, DATA_SIZE));
+
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test3.bin", archive_entry_pathname(ae));
+ assertEqualInt(DATA_SIZE, archive_entry_size(ae));
+ assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
+ assertA(verify_data(buff, 3, DATA_SIZE));
+
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test4.bin", archive_entry_pathname(ae));
+ assertEqualInt(DATA_SIZE, archive_entry_size(ae));
+ assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
+ assertA(verify_data(buff, 4, DATA_SIZE));
+
+ /* There should be no more files in this archive. */
+
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+/* This test is really the same as the test above, but it deals with a solid
+ * archive instead of a regular archive. The test solid archive contains the
+ * same set of files as regular test archive, but it's size is 2x smaller,
+ * because solid archives reuse the window buffer from previous compressed
+ * files, so it's able to compress lots of small files more effectively. */
+
+DEFINE_TEST(test_read_format_rar5_multiple_files_solid)
+{
+ const int DATA_SIZE = 4096;
+ uint8_t buff[DATA_SIZE];
+
+ PROLOGUE("test_read_format_rar5_multiple_files_solid.rar");
+
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test1.bin", archive_entry_pathname(ae));
+ assertEqualInt(DATA_SIZE, archive_entry_size(ae));
+ assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
+ assertA(verify_data(buff, 1, DATA_SIZE));
+
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test2.bin", archive_entry_pathname(ae));
+ assertEqualInt(DATA_SIZE, archive_entry_size(ae));
+ assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
+ assertA(verify_data(buff, 2, DATA_SIZE));
+
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test3.bin", archive_entry_pathname(ae));
+ assertEqualInt(DATA_SIZE, archive_entry_size(ae));
+ assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
+ assertA(verify_data(buff, 3, DATA_SIZE));
+
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test4.bin", archive_entry_pathname(ae));
+ assertEqualInt(DATA_SIZE, archive_entry_size(ae));
+ assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
+ assertA(verify_data(buff, 4, DATA_SIZE));
+
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_multiarchive_skip_all)
+{
+ const char* reffiles[] = {
+ "test_read_format_rar5_multiarchive.part01.rar",
+ "test_read_format_rar5_multiarchive.part02.rar",
+ "test_read_format_rar5_multiarchive.part03.rar",
+ "test_read_format_rar5_multiarchive.part04.rar",
+ "test_read_format_rar5_multiarchive.part05.rar",
+ "test_read_format_rar5_multiarchive.part06.rar",
+ "test_read_format_rar5_multiarchive.part07.rar",
+ "test_read_format_rar5_multiarchive.part08.rar",
+ NULL
+ };
+
+ PROLOGUE_MULTI(reffiles);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("home/antek/temp/build/unrar5/libarchive/bin/bsdcat_test", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("home/antek/temp/build/unrar5/libarchive/bin/bsdtar_test", archive_entry_pathname(ae));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_multiarchive_skip_all_but_first)
+{
+ const char* reffiles[] = {
+ "test_read_format_rar5_multiarchive.part01.rar",
+ "test_read_format_rar5_multiarchive.part02.rar",
+ "test_read_format_rar5_multiarchive.part03.rar",
+ "test_read_format_rar5_multiarchive.part04.rar",
+ "test_read_format_rar5_multiarchive.part05.rar",
+ "test_read_format_rar5_multiarchive.part06.rar",
+ "test_read_format_rar5_multiarchive.part07.rar",
+ "test_read_format_rar5_multiarchive.part08.rar",
+ NULL
+ };
+
+ PROLOGUE_MULTI(reffiles);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertA(0 == extract_one(a, ae, 0x35277473));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_multiarchive_skip_all_but_second)
+{
+ const char* reffiles[] = {
+ "test_read_format_rar5_multiarchive.part01.rar",
+ "test_read_format_rar5_multiarchive.part02.rar",
+ "test_read_format_rar5_multiarchive.part03.rar",
+ "test_read_format_rar5_multiarchive.part04.rar",
+ "test_read_format_rar5_multiarchive.part05.rar",
+ "test_read_format_rar5_multiarchive.part06.rar",
+ "test_read_format_rar5_multiarchive.part07.rar",
+ "test_read_format_rar5_multiarchive.part08.rar",
+ NULL
+ };
+
+ PROLOGUE_MULTI(reffiles);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertA(0 == extract_one(a, ae, 0xE59665F8));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_blake2)
+{
+ const la_ssize_t proper_size = 814;
+ uint8_t buf[proper_size];
+
+ PROLOGUE("test_read_format_rar5_blake2.rar");
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualInt(proper_size, archive_entry_size(ae));
+
+ /* Should blake2 calculation fail, we'll get a failure return
+ * value from archive_read_data(). */
+
+ assertA(proper_size == archive_read_data(a, buf, proper_size));
+
+ /* To be extra pedantic, let's also check crc32 of the poem. */
+ assertEqualInt(crc32(0, buf, proper_size), 0x7E5EC49E);
+
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_arm_filter)
+{
+ /* This test unpacks a file that uses an ARM filter. The DELTA
+ * and X86 filters are tested implicitly in the "multiarchive_skip"
+ * test. */
+
+ const la_ssize_t proper_size = 90808;
+ uint8_t buf[proper_size];
+
+ PROLOGUE("test_read_format_rar5_arm.rar");
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualInt(proper_size, archive_entry_size(ae));
+ assertA(proper_size == archive_read_data(a, buf, proper_size));
+
+ /* Yes, RARv5 unpacker itself should calculate the CRC, but in case
+ * the DONT_FAIL_ON_CRC_ERROR define option is enabled during compilation,
+ * let's still fail the test if the unpacked data is wrong. */
+ assertEqualInt(crc32(0, buf, proper_size), 0x886F91EB);
+
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_stored_skip_all)
+{
+ const char* fname = "test_read_format_rar5_stored_manyfiles.rar";
+
+ PROLOGUE(fname);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("make_uue.tcl", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("cebula.txt", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_stored_skip_in_part)
+{
+ const char* fname = "test_read_format_rar5_stored_manyfiles.rar";
+ char buf[6];
+
+ /* Skip first, extract in part rest. */
+
+ PROLOGUE(fname);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("make_uue.tcl", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("cebula.txt", archive_entry_pathname(ae));
+ assertA(6 == archive_read_data(a, buf, 6));
+ assertEqualInt(0, memcmp(buf, "Cebula", 6));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(4 == archive_read_data(a, buf, 4));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_stored_skip_all_but_first)
+{
+ const char* fname = "test_read_format_rar5_stored_manyfiles.rar";
+ char buf[405];
+
+ /* Extract first, skip rest. */
+
+ PROLOGUE(fname);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("make_uue.tcl", archive_entry_pathname(ae));
+ assertA(405 == archive_read_data(a, buf, sizeof(buf)));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("cebula.txt", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_stored_skip_all_in_part)
+{
+ const char* fname = "test_read_format_rar5_stored_manyfiles.rar";
+ char buf[4];
+
+ /* Extract in part all */
+
+ PROLOGUE(fname);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("make_uue.tcl", archive_entry_pathname(ae));
+ assertA(4 == archive_read_data(a, buf, 4));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("cebula.txt", archive_entry_pathname(ae));
+ assertA(4 == archive_read_data(a, buf, 4));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(4 == archive_read_data(a, buf, 4));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_multiarchive_solid_skip_all)
+{
+ const char* reffiles[] = {
+ "test_read_format_rar5_multiarchive_solid.part01.rar",
+ "test_read_format_rar5_multiarchive_solid.part02.rar",
+ "test_read_format_rar5_multiarchive_solid.part03.rar",
+ "test_read_format_rar5_multiarchive_solid.part04.rar",
+ NULL
+ };
+
+ PROLOGUE_MULTI(reffiles);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("cebula.txt", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test1.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test2.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test3.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test4.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test5.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test6.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("elf-Linux-ARMv7-ls", archive_entry_pathname(ae));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_multiarchive_solid_skip_all_but_first)
+{
+ const char* reffiles[] = {
+ "test_read_format_rar5_multiarchive_solid.part01.rar",
+ "test_read_format_rar5_multiarchive_solid.part02.rar",
+ "test_read_format_rar5_multiarchive_solid.part03.rar",
+ "test_read_format_rar5_multiarchive_solid.part04.rar",
+ NULL
+ };
+
+ PROLOGUE_MULTI(reffiles);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("cebula.txt", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0x7E5EC49E));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test1.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test2.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test3.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test4.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test5.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test6.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("elf-Linux-ARMv7-ls", archive_entry_pathname(ae));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+/* "skip_all_but_scnd" -> am I hitting the test name limit here after
+ * expansion of "scnd" to "second"? */
+
+DEFINE_TEST(test_read_format_rar5_multiarchive_solid_skip_all_but_scnd)
+{
+ const char* reffiles[] = {
+ "test_read_format_rar5_multiarchive_solid.part01.rar",
+ "test_read_format_rar5_multiarchive_solid.part02.rar",
+ "test_read_format_rar5_multiarchive_solid.part03.rar",
+ "test_read_format_rar5_multiarchive_solid.part04.rar",
+ NULL
+ };
+
+ PROLOGUE_MULTI(reffiles);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("cebula.txt", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0x7CCA70CD));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test1.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test2.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test3.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test4.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test5.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test6.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("elf-Linux-ARMv7-ls", archive_entry_pathname(ae));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_multiarchive_solid_skip_all_but_third)
+{
+ const char* reffiles[] = {
+ "test_read_format_rar5_multiarchive_solid.part01.rar",
+ "test_read_format_rar5_multiarchive_solid.part02.rar",
+ "test_read_format_rar5_multiarchive_solid.part03.rar",
+ "test_read_format_rar5_multiarchive_solid.part04.rar",
+ NULL
+ };
+
+ PROLOGUE_MULTI(reffiles);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("cebula.txt", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test1.bin", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0x7E13B2C6));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test2.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test3.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test4.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test5.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test6.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("elf-Linux-ARMv7-ls", archive_entry_pathname(ae));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_multiarchive_solid_skip_all_but_last)
+{
+ const char* reffiles[] = {
+ "test_read_format_rar5_multiarchive_solid.part01.rar",
+ "test_read_format_rar5_multiarchive_solid.part02.rar",
+ "test_read_format_rar5_multiarchive_solid.part03.rar",
+ "test_read_format_rar5_multiarchive_solid.part04.rar",
+ NULL
+ };
+
+ PROLOGUE_MULTI(reffiles);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("cebula.txt", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test1.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test2.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test3.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test4.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test5.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test6.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("elf-Linux-ARMv7-ls", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0x886F91EB));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_solid_skip_all)
+{
+ const char* reffile = "test_read_format_rar5_solid.rar";
+
+ /* Skip all */
+
+ PROLOGUE(reffile);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test1.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test2.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test3.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test4.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test5.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test6.bin", archive_entry_pathname(ae));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_solid_skip_all_but_first)
+{
+ const char* reffile = "test_read_format_rar5_solid.rar";
+
+ /* Extract first, skip rest */
+
+ PROLOGUE(reffile);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0x7CCA70CD));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test1.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test2.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test3.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test4.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test5.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test6.bin", archive_entry_pathname(ae));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_solid_skip_all_but_second)
+{
+ const char* reffile = "test_read_format_rar5_solid.rar";
+
+ /* Skip first, extract second, skip rest */
+
+ PROLOGUE(reffile);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test1.bin", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0x7E13B2C6));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test2.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test3.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test4.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test5.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test6.bin", archive_entry_pathname(ae));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_solid_skip_all_but_last)
+{
+ const char* reffile = "test_read_format_rar5_solid.rar";
+
+ /* Skip all but last, extract last */
+
+ PROLOGUE(reffile);
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test1.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test2.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test3.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test4.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test5.bin", archive_entry_pathname(ae));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test6.bin", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0x36A448FF));
+ assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
+ EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_extract_win32)
+{
+ PROLOGUE("test_read_format_rar5_win32.rar");
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test.bin", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0x7CCA70CD));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test1.bin", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0x7E13B2C6));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test2.bin", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0xF166AFCB));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test3.bin", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0x9FB123D9));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test4.bin", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0x10C43ED4));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test5.bin", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0xB9D155F2));
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualString("test6.bin", archive_entry_pathname(ae));
+ assertA(0 == extract_one(a, ae, 0x36A448FF));
+ EPILOGUE();
+}
diff --git a/libarchive/test/test_read_format_rar5_arm.rar.uu b/libarchive/test/test_read_format_rar5_arm.rar.uu
new file mode 100644
index 000000000000..19a8904361c0
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_arm.rar.uu
@@ -0,0 +1,916 @@
+begin 644 test_read_format_rar5_arm.rar
+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
+JB(`%`1)E;&8M3&EN=7@M05)-=C<M;',*`Q.K*:];'6F`#!UW5E$#!00`
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_blake2.rar.uu b/libarchive/test/test_read_format_rar5_blake2.rar.uu
new file mode 100644
index 000000000000..fe783f39ed4c
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_blake2.rar.uu
@@ -0,0 +1,18 @@
+begin 644 test_read_format_rar5_blake2.rar
+M4F%R(1H'`0#SX8+K"P$%!P`&`0&`@(``G\AL9T<"`RZ6!`"N!J2#`H`%`0IC
+M96)U;&$N='AT(@(`YGN&)9H<T-4;;6=VSA"UI<]AE5F0/`"<J,-&UD4X4Z4*
+M`Q/8<K!;AO4W+,Z$$@(W=4,T,_1@-+UPHV2`./@$LCDHDIE#H=Q6HO6ENI%`
+MDH(%60!B<&@G#):ZYN\PD8?_Q2T;QM`)'/A[XE<BS#F8<SQPY[/W[C_<ZO+B
+MVJKN>RW#!V][-VM'MJ^^#686N9>>L\.7ZE#3!_/][K2S]G1DR+Z^7F8BN1X0
+M5C;9*7958_V2?B;;=J=N[KHV+"ZA!YHY#/G_C>:Y+\RFMN%A8]94O?OY_AM<
+MPE=<8[N7Y/@&A*5GFV:9E;M&8JU!O/TIK!)5X(1%@FPVF'!BV@KI;P1X;E7%
+MUF:9HH_W^02_+:F+$Y(@/'B`PID.TWYQE_\RLWU#)O3.[Q($`^A166GIT;W;
+MTJ2BC%X%D3X'S<XM2VCU%H<$)2[..]M(;37,H8X793O-@H5X47/R$4ILC1A(
+MMGU'^5C>O%DLWP[4Y@FL"%R-TR'QED.B&5!.:-0?\(Z*Y>@-Q\DTM%F$NB_)
+MR2,7&FYP>)NZC>$5IF2H83OILZ:Z@5?,CH';."Z1XHD*/TW>0;:#%+'H].L@
+M]Y$F)>Z]H[`(+UQGS7TRO#-_QJ!U%RCGU1\95849&LP&15-H7.]MZ[78W*#A
+M&G"U:H/3OF)^-H<4X%:Q^/'7#KVGX!=*N0!%4X-1'89S/0E)E,ZW!'')%(R(
+MD].ET_<?4C8_N,$1&I>+8,B]G5;8>I3T*8I8CH+E&UKAJ]WA;%(A/KO`R^M\
+,"^WWU!UW5E$#!00`
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_compressed.rar.uu b/libarchive/test/test_read_format_rar5_compressed.rar.uu
new file mode 100644
index 000000000000..f9f811c6dc0d
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_compressed.rar.uu
@@ -0,0 +1,13 @@
+begin 644 rar5_compressed.rar
+M4F%R(1H'`0#SX8+K"P$%!P`&`0&`@(``B<9?VB8"`POI`@2P":2#`LUPRGR`
+M!0$(=&5S="YB:6X*`Q.+5ZQ;^!BM'LKT90$G96!4'U5V7;^4DG')SV6660QP
+MV663&,62$X9"223AD)"2220DXY))(0A))"$)))"22$(2$LVU;WM],PZ`?1T#
+MKC^>NI_W0?[WVO?=>:\Z7^@`0`$`R""?GX]O7T\O'O[NSKZNGHY^7DX^+AX-
+M_=W-K9U];5U-/2T,_-S,K)R,?&Q<3#P;^]O+NYN+>VM;2SLK&OKJVKJJFGI:
+M2CHJ&@GYV<FYF7EI232R4C(1Z%`?CHR*B8<Z<-FH:$@H!^?'MZ>'9T<W)Q;V
+MUK:6=E8V%?75M95U53(3?U_(_0)3Z)3G^$2718HP9Y87:C@IIBF4%^9"T7:=
+M1C+#.,"H1_^@E,9I"E]E4*Q65@N+`9%H-RX'=>$&P`\Q!(R">9A6-`NFH9;8
+M-YN'@X!@<@^N81.@IG88#P-MZ'N]AU?0C?Q80(T8,><*'DT)@V+XX.8Z'"($
+?J>&%%CMC0_GQ4(!L(0T(A-(QG)`O)0`==U91`P4$````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part01.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part01.rar.uu
new file mode 100644
index 000000000000..a83c78ca22cd
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiarchive.part01.rar.uu
@@ -0,0 +1,345 @@
+begin 644 rar5_multiarchive.part01.rar
+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
+/428#!00!````````````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part02.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part02.rar.uu
new file mode 100644
index 000000000000..fce29824622d
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiarchive.part02.rar.uu
@@ -0,0 +1,345 @@
+begin 644 rar5_multiarchive.part02.rar
+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
+/428#!00!````````````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part03.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part03.rar.uu
new file mode 100644
index 000000000000..c600f025395e
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiarchive.part03.rar.uu
@@ -0,0 +1,345 @@
+begin 644 rar5_multiarchive.part03.rar
+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
+/````````````````````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part04.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part04.rar.uu
new file mode 100644
index 000000000000..3b47dd07c873
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiarchive.part04.rar.uu
@@ -0,0 +1,345 @@
+begin 644 rar5_multiarchive.part04.rar
+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
+/428#!00!````````````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part05.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part05.rar.uu
new file mode 100644
index 000000000000..4dc97d65ea1e
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiarchive.part05.rar.uu
@@ -0,0 +1,345 @@
+begin 644 rar5_multiarchive.part05.rar
+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
+/428#!00!````````````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part06.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part06.rar.uu
new file mode 100644
index 000000000000..1e2ad0cf9833
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiarchive.part06.rar.uu
@@ -0,0 +1,345 @@
+begin 644 rar5_multiarchive.part06.rar
+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
+/428#!00!````````````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part07.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part07.rar.uu
new file mode 100644
index 000000000000..de1044e30589
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiarchive.part07.rar.uu
@@ -0,0 +1,345 @@
+begin 644 rar5_multiarchive.part07.rar
+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
+/428#!00!````````````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiarchive.part08.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive.part08.rar.uu
new file mode 100644
index 000000000000..eae45fc7a2fb
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiarchive.part08.rar.uu
@@ -0,0 +1,208 @@
+begin 644 rar5_multiarchive.part08.rar
+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
+<9'1A<E]T97-T"@,3J@2K6]%U`C<==U91`P4$````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiarchive_solid.part01.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive_solid.part01.rar.uu
new file mode 100644
index 000000000000..af4addf62d69
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiarchive_solid.part01.rar.uu
@@ -0,0 +1,299 @@
+begin 644 test_read_format_rar5_multiarchive_solid.part01.rar
+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
+E+4%2378W+6QS"@,3JRFO6QUI@`R+1U$F`P4$`0``````````````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiarchive_solid.part02.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive_solid.part02.rar.uu
new file mode 100644
index 000000000000..1d77567e3e2b
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiarchive_solid.part02.rar.uu
@@ -0,0 +1,299 @@
+begin 644 test_read_format_rar5_multiarchive_solid.part02.rar
+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
+E+4%2378W+6QS"@,3JRFO6QUI@`R+1U$F`P4$`0``````````````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiarchive_solid.part03.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive_solid.part03.rar.uu
new file mode 100644
index 000000000000..4ec0e551fd1f
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiarchive_solid.part03.rar.uu
@@ -0,0 +1,299 @@
+begin 644 test_read_format_rar5_multiarchive_solid.part03.rar
+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
+E+4%2378W+6QS"@,3JRFO6QUI@`R+1U$F`P4$`0``````````````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiarchive_solid.part04.rar.uu b/libarchive/test/test_read_format_rar5_multiarchive_solid.part04.rar.uu
new file mode 100644
index 000000000000..efba21d5076b
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiarchive_solid.part04.rar.uu
@@ -0,0 +1,76 @@
+begin 644 test_read_format_rar5_multiarchive_solid.part04.rar
+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
+H/9W66E.Q+(N>XP"]]!;_)_1#+2813H\*W_]K2Z?M5Y0==U91`P4$````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiple_files.rar.uu b/libarchive/test/test_read_format_rar5_multiple_files.rar.uu
new file mode 100644
index 000000000000..3fa8930c9d33
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiple_files.rar.uu
@@ -0,0 +1,40 @@
+begin 644 rar5_multiple_files.rar
+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
+D=?O@C\QRH^^TD?3?B/F+D.=:AQZT.#3\5'_^`!UW5E$#!00`
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu b/libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu
new file mode 100644
index 000000000000..4a8acb08c45a
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_multiple_files_solid.rar.uu
@@ -0,0 +1,19 @@
+begin 644 rar5_multiple_files_solid.rar
+M4F%R(1H'`0`)[\AO"P$%!P0&`0&`@(``&8R4_R<"`POY`@2`(*2#`L:R$WZ`
+M'0$)=&5S=#$N8FEN"@,39U^L6QI:GA#)YW4!&&5492;T@%?U\^?/DDDDDDDD
+MDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDO\\YG#6M
+MEU>^U%T\J3G5RSM\>Y[K?1K,SKP\_'=-M[V;Z=_QC-9YYK#.K,Z<_!W``(`(
+M`;##?S\>_N[>SKZNGHY^;EY./BX>#?WMW<V]K9V-?6U=33TM'0S\[-S,O*R<
+MC'QL7$P\+!P+^^O;R[NKFXM[:UM+.RL;"OKJVLJZJIJ*>FI:2CHJ&@GYZ=G)
+MN:F9B7EI64DY*1D(^.C8R+BHF(AX:%A(."@8!_?GU\>WIY>/__O[_/W[V8]@
+MIG"F6O5\HHC7\D(6UP%MQ8#$T:+90ED3*`YM@Q@Q-FR(B6D(6UP%^8L!B:-%
+MLH2R)E`<_(,8,3;R1$2TA"VN`OQ%@,31HME"61,H#GX!C!B;>"(B6D(6UP%]
+MXL!B:-%LH2R)E`:8=>%?F.N5]]Q:OIMZKYB^ISUY3E[BG(VOBL7^`#MSXI$G
+M`@,+F0`$@""D@P++KV;QP!T!"71E<W0R+F)I;@H#$WI?K%LM5',700T6<``@
+M`@!J7\?WN>#%ZG\PZ\._C^7^`):4S(<G`@,+J@`$@""D@P+9([&?P!T!"71E
+M<W0S+F)I;@H#$WY?K%O0/0`#0#TG<``@`@!MU_']\P_O30\K*!](8[@A](8[
+M@A](8[@A[F'7AW\?R_P`C7A3;"<"`PN9``2`(*2#`M0^Q!#`'0$)=&5S=#0N
+M8FEN"@,3@5^L6Z$F'1)"#A9P`"`"`&V7\?WL\&+V/YAUX=_'\O\`'7=640,%
+"!```
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_solid.rar.uu b/libarchive/test/test_read_format_rar5_solid.rar.uu
new file mode 100644
index 000000000000..f4d06c7a549d
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_solid.rar.uu
@@ -0,0 +1,27 @@
+begin 644 test_read_format_rar5_solid.rar
+M4F%R(1H'`0`)[\AO"P$%!P0&`0&`@(``Y3=C#"8"`PNG`P2P":2#`LUPRGR`
+M'0$(=&5S="YB:6X*`Q.+5ZQ;^!BM'LTUHP$H=E560?1@6-L,?'&,&#'QQBRR
+MQC&63&#!9999#'QLLLF,8LD)\9"223XR$A)))(2?.222$(220A"220DDA"$O
+M?GOFO?-:2E<YGJG3[F>V7.C+W-]O[F][\UT:YS?7KE^_SOEJUK5:Z=?W.<M^
+M:\_>;K=OHWNY6]_X9H`$`!`-2EP'SS]?G[_;Z?/X_#W^[V^SU>GT>?S>7R>+
+MP]_O=SM]KL]CK]7J=+H\_G<WF<OE<GD<;B<+@\#?;W>;O=;G<;?;;39[+8:_
+M7:S5:G4:?3:72:+0Z#/9S-YG,5V7RV5RE54U&3R./QV,IJ6DH\7B<1AL+A)^
+M>G9R;FIG`7^_7R]7F[W:Z7.Y7&WVVV2"H4:^RH@6WA;;=>TLP;<\(C9ES0)A
+M"0S24<&6T))M+(Q2K/T7"3U5J_?EK'DC(E)6XI6X%+R18*3*BE"I[J5;*EH[
+MP6QEBW][+H7TO'+E]9@I29*@FBJYLM7.%Q9TO!/$]GRP-`590EM<.76HB_&*
+M+!T99VD+ATI>NF*8QI9JG+CY`OEDBH:@M;4EW:HI:K+/UA=.M*3KB,S<;NDG
+M`@,+@0$$@""D@P+&LA-^P!T!"71E<W0Q+F)I;@H#$V=?K%L:6IX01F)^:`!`
+M!`#5&S!)"T^]G>_Z1)!;Q!;;KVH)@VYX1&S+F@3`$AFDHX,MH23:61C&_!'Q
+MI+GZ`VDHC9ES0)?"0S24<&6T))M+(QC>@CXTESU`;241LRYH$O!(9I*.#+:$
+MDVED8I3OA=ECKEQN^6NQ;W5V$7ZXO7RXKWBXHW7_KC/PKJ>2!"<"`PN8``2`
+M(*2#`LNO9O'`'0$)=&5S=#(N8FEN"@,3>E^L6RU4<Q=&"15H`$`$`-;/C^_Q
+M@8S4_E.^(_Q_,_!H[RSC)P(#"ZD`!(`@I(,"V2.QG\`=`0ET97-T,RYB:6X*
+M`Q-^7ZQ;T#T``T8Z)F@`0`0`X3/C^L(?W\V-JV@<2"-8`<2"-8`<2"-8`;Y3
+MOB/\?S/P&*PC^2<"`PN8``2`(*2#`M0^Q!#`'0$)=&5S=#0N8FEN"@,3@5^L
+M6Z$F'1)%"A5H`$`$`."SX_HC`QFQ_*=\1_C^9^#GX4Z7)P(#"ZX`!(`@I(,"
+M\E71N<`=`0ET97-T-2YB:6X*`Q-<9ZQ;&]1%$$0U*V@`0`0`X#/C^L:?W]Y&
+M:$N'VH0S0(,/M0AF?/X?:A#,\>P_X4[XC_'\S\!M2\W-)P(#"Y@`!(`@I(,"
+M_TBD-L`=`0ET97-T-BYB:6X*`Q-?9ZQ;.X_4%T4*%6@`0`0`W[/C^B,#&;'\
+/IWQ'^/YGX!UW5E$#!00`
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_stored.rar.uu b/libarchive/test/test_read_format_rar5_stored.rar.uu
new file mode 100644
index 000000000000..405b8795a162
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_stored.rar.uu
@@ -0,0 +1,6 @@
+begin 644 rar5_stored.rar
+M4F%R(1H'`0`SDK7E"@$%!@`%`0&`@``X,`9C+`(#"YT`!)T`I(,"M$.@E8``
+M`0YH96QL;W=O<FQD+G1X=`H#$WX.JUM6Z0X::&5L;&\@;&EB87)C:&EV92!T
+397-T('-U:71E(0H==U91`P4$````
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_stored_manyfiles.rar.uu b/libarchive/test/test_read_format_rar5_stored_manyfiles.rar.uu
new file mode 100644
index 000000000000..378ded713195
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_stored_manyfiles.rar.uu
@@ -0,0 +1,61 @@
+begin 644 test_read_format_rar5_stored_manyfiles.rar
+M4F%R(1H'`0#SX8+K"P$%!P`&`0&`@(``&F:^=BH"`PN5`P25`^V#`MR*1TF`
+M``$,;6%K95]U=64N=&-L"@,3SB:O6P&2/QLC(2]U<W(O8FEN+V5N=B!T8VQS
+M:#@N-@H*<')O8R!P86-K7W5U92![9FYA;65]('L*("`@(&5X96,@+W5S<B]B
+M:6XO=75E;F-O9&4@)&9N86UE("1F;F%M92`^("1F;F%M92YU=0H@("`@<V5T
+M(&]U="!;97AE8R!L<R`M;&$@)&9N86UE("1F;F%M92YU=5T*("`@('!U=',@
+M)&]U=`H*("`@('-E="!O=70@6V5X96,@8W`@+78@)&9N86UE+G5U("]H;VUE
+M+V%N=&5K+V1E=B]U;G)A<C4O;&EB87)C:&EV92]L:6)A<F-H:79E+W1E<W0O
+M)&9N86UE+G5U70H@("`@<'5T<R`D;W5T"GT*"FEF('LD87)G8R`\(#%]('L*
+M("`@('!U=',@(D5N=&5R('1H92!N86UE(&]F('1H92!205(@9FEL92!I;B!T
+M:&4@87)G=6UE;G0N(@H@("`@97AI="`Q"GT*"F9O<F5A8V@@9FYA;64@)&%R
+M9W8@>PH@("`@<&%C:U]U=64@)&%R9W8*?0JEGN@6*`(#"ZX&!*X&I(,"GL1>
+M?H```0IC96)U;&$N='AT"@,3V'*P6X;U-RQ#96)U;&$*"D-O(&EN;F5G;R!C
+M96)U;&$N"D]N82!N:64@;6$@=V[$F71R>FYOQ9MC:2X*2F5S="!S;V+$A2!N
+M82!W<VMR;\6;(&-E8G5LQ(4L"F1O('-T;W!N:6$@8V5B=6QI8WIN;\6;8VDN
+M"D-E8G5L87-T82!N82!Z97=NQ(5T<GHL"F-E8G5L;W=A(&1O(')D>F5N:6$L
+M"FUO9\6"86)Y('=E:G)Z9<2'('<@<VEE8FEE"F-E8G5L82!B97H@<')Z97)A
+MQ;QE;FEA+@H*5R!N87,@;V)C>GEZ;F$@:2!D>FEK;\6;Q(<*;&5D=VEE('-K
+MP[-RQ(4@<')Z>6MR>71A+`II;F9E<FYO('<@;F%S(&EN=&5R;GDL"F%N871O
+M;6EA(&=W8<6"=&]W;F$L"F$@=R!C96)U;&D@8V5B=6QA+`IN:64@<&]K<L29
+M=&YE(&IE;&ET82X*3VYA('=I96QE:W)OQ(<@;F%G82P*9&\@9\6"Q)EB:2!I
+M='EM<&]D;V)N82X*"D)Y="!N:65S<')Z96-Z;GD@8V5B=6QA+`IU9&%N>2!C
+M96)U;&$@='=O<BX*5R!J961N96H@<&\@<')O<W1U(&1R=6=A+`IW('=IQ)EK
+M<WIE:B!M;FEE:G-Z82!Z87=A<G1A+`IA('<@;F%S=,29<&YE:B!K;VQE:FYA
+M+`IC>GEL:2!T<GIE8VEA(&D@8WIW87)T82X*1&_%FW)O9&MO=V$@9G5G82X*
+M16-H;R!ZQ8)OQ;QO;F4@=R!C:,.S<BX*"D-E8G5L82P@=&\@:F$@<F]Z=6UI
+M96TZ"FYA:FYA9&]B;FEE:G-Z>2!B<GIU8V@@Q9MW:6%T82X*4V%M('-I92!A
+M=7)E;VQA;6D*;F$@=\6"87-NQ(4@8VAW8<6"Q)D@;W!L871A+@I7(&YA<R`M
+M('3%@G5S>F-Z92P@;F5R=WDL(,6\><6">2P*Q9ML=7IY(&D@<V5K<F5T;F_%
+MFV-I+@I)(&IE<W0@;F%M(&]D;<.S=VEO;GD*:61I;W1Y>FT@9&]S:V]N8<6"
+M;\6;8VDN"@HH5VESQ8)A=V$@4WIY;6)O<G-K82D*":B*K28"`PNP"02P":2#
+M`LUPRGR```$(=&5S="YB:6X*`Q.+5ZQ;^!BM'@```````````0````4````+
+M````$P```!T````I````-P```$<```!9````;0```(,```";````M0```-$`
+M``#O````#P$``#$!``!5`0``>P$``*,!``#-`0``^0$``"<"``!7`@``B0(`
+M`+T"``#S`@``*P,``&4#``"A`P``WP,``!\$``!A!```I00``.L$```S!0``
+M?04``,D%```7!@``9P8``+D&```-!P``8P<``+L'```5"```<0@``,\(```O
+M"0``D0D``/4)``!;"@``PPH``"T+``"9"P``!PP``'<,``#I#```70T``-,-
+M``!+#@``Q0X``$$/``"_#P``/Q```,$0``!%$0``RQ$``%,2``#=$@``:1,`
+M`/<3``"'%```&14``*T5``!#%@``VQ8``'47```1&```KQ@``$\9``#Q&0``
+ME1H``#L;``#C&P``C1P``#D=``#G'0``EQX``$D?``#]'P``LR```&LA```E
+M(@``X2(``)\C``!?)```(24``.4E``"K)@``<R<``#TH```)*0``URD``*<J
+M``!Y*P``32P``",M``#[+0``U2X``+$O``"/,```;S$``%$R```U,P``&S0`
+M``,U``#M-0``V38``,<W``"W.```J3D``)TZ``"3.P``BSP``(4]``"!/@``
+M?S\``']```"!00``A4(``(M#``"31```G44``*E&``"W1P``QT@``-E)``#M
+M2@```TP``!M-```U3@``44\``&]0``"/40``L5(``-53``#[5```(U8``$U7
+M``!Y6```IUD``-=:```)7```/5T``'->``"K7P``Y6```"%B``!?8P``GV0`
+M`.%E```E9P``:V@``+-I``#]:@``26P``)=M``#G;@``.7```(UQ``#C<@``
+M.W0``)5U``#Q=@``3W@``*]Y```1>P``=7P``-M]``!#?P``K8```!F"``"'
+M@P``]X0``&F&``#=AP``4XD``,N*``!%C```P8T``#^/``"_D```09(``,63
+M``!+E0``TY8``%V8``#IF0``=YL```>=``"9G@``+:```,.A``!;HP``]:0`
+M`)&F```OJ```SZD``'&K```5K0``NZX``&.P```-L@``N;,``&>U```7MP``
+MR;@``'VZ```SO```Z[T``*6_``!AP0``'\,``-_$``"AQ@``9<@``"O*``#S
+MRP``O<T``(G/``!7T0``)],``/G4``#-U@``H]@``'O:``!5W```,=X```_@
+M``#OX0``T>,``+7E``";YP``@^D``&WK``!9[0``1^\``#?Q```I\P``'?4`
+M`!/W```+^0``!?L```']``#__@``_P`!``$#`0`%!0$`"P<!`!,)`0`="P$`
+M*0T!`#</`0!'$0$`61,!`&T5`0"#%P$`FQD!`+4;`0#1'0$`[Q\!``\B`0`Q
+M)`$`528!`'LH`0"C*@$`S2P!`/DN`0`G,0$`5S,!`(DU`0"]-P$`\SD!`"L\
+M`0!E/@$`H4`!`-]"`0`?10$`84<!`*5)`0#K2P$`,TX!`'U0`0#)4@$`%U4!
+5`&=7`0"Y60$`#5P!`!UW5E$#!00`
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_win32.rar.uu b/libarchive/test/test_read_format_rar5_win32.rar.uu
new file mode 100644
index 000000000000..59920490e998
--- /dev/null
+++ b/libarchive/test/test_read_format_rar5_win32.rar.uu
@@ -0,0 +1,68 @@
+begin 644 test_read_format_rar5_win32.rar
+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
+;0];M1^11#SKD/'L0\&IZ_]!^T!UW5E$#!00`
+`
+end
diff --git a/libarchive/test/test_read_format_xar.c b/libarchive/test/test_read_format_xar.c
index b7189eb259e6..4654f8386efb 100644
--- a/libarchive/test/test_read_format_xar.c
+++ b/libarchive/test/test_read_format_xar.c
@@ -614,6 +614,117 @@ static unsigned char archive11[] = {
0x00,0x00,0x00,0xff,0xff,0x03,0x00,0x37,0xf7,0x06,0x47
};
+/* Verify that a file which is missing timestamp information
+has the corresponding timestamps unset.
+#How to make e.g.
+ struct archive *a = archive_write_new();
+ archive_write_set_format_xar(a);
+ archive_write_add_filter_none(a);
+ size_t used, buffsize = 1500;
+ char *buff = (char*) malloc(buffsize);
+ archive_write_open_memory(a, buff, buffsize, &used);
+
+ struct archive_entry *ae = archive_entry_new();
+ archive_entry_copy_pathname(ae, "file");
+ archive_entry_set_size(ae, 8);
+ archive_write_header(a, ae);
+ archive_entry_free(ae);
+ archive_write_data(a, "12345678", 9);
+ archive_write_free(a);
+
+ std::cout << std::string(buff, used);
+ free(buff);
+
+$./a.out > f12.xar
+Verify toc has no mtime/atime sections
+$ xar --dump-toc=- -f f12.xar
+Dump contents
+$ ./a.out | od -t x1 | sed -E -e 's/^0[0-9]+//;s/^ //;s/( )([0-9a-f]{2})/0x\2,/g;$ D'
+*/
+
+static unsigned char archive12[] = {
+0x78,0x61,0x72,0x21,0x00,0x1c,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,
+0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x56,0x00,0x00,0x00,0x01,0x78,0x9c,0x55,0x90,
+0x41,0x8e,0xc2,0x30,0x0c,0x45,0xf7,0x9c,0x22,0xca,0xbe,0x38,0x2d,0x2c,0x10,0x72,
+0xdb,0xdd,0x9c,0x00,0x0e,0x50,0xb5,0x6e,0x89,0x68,0x12,0xd4,0x84,0x11,0x70,0x7a,
+0x62,0x17,0x46,0x9a,0x28,0x92,0xbf,0x5f,0xec,0xef,0xc8,0xd8,0x3e,0xdc,0xac,0x7e,
+0x69,0x89,0x36,0xf8,0x5a,0x97,0x5b,0xa3,0x15,0xf9,0x3e,0x0c,0xd6,0x4f,0xb5,0x3e,
+0x9f,0x7e,0x8a,0x83,0x6e,0x9b,0x0d,0x3e,0xba,0xa5,0xd9,0x28,0x4c,0xa1,0xcf,0x41,
+0x61,0xbf,0x50,0x97,0x72,0x47,0x91,0xac,0xa3,0xa6,0x32,0xe5,0xa1,0x28,0x4d,0x61,
+0xaa,0x53,0x65,0x8e,0xf9,0xee,0x77,0x08,0xff,0x4b,0xa4,0xe9,0x42,0xfd,0x35,0xde,
+0x9d,0x8a,0xe9,0x39,0x53,0xad,0xe3,0xa5,0x2b,0x35,0xbf,0x28,0x0c,0xe3,0x18,0x29,
+0x35,0x06,0xe1,0xa3,0x84,0x46,0xfb,0x62,0x73,0x04,0x11,0x6c,0x01,0x5f,0x0f,0xc9,
+0x46,0x3b,0x93,0xb2,0x43,0xfe,0xf6,0xc7,0xc6,0x77,0x79,0x14,0x53,0x04,0x91,0x02,
+0xd3,0xf3,0xf6,0x85,0x22,0x05,0x5a,0x1f,0x06,0xe2,0x79,0xab,0x10,0xe6,0x04,0xe5,
+0x83,0xe0,0xfe,0xe0,0xdd,0x0e,0x5c,0xc6,0x41,0xf2,0x69,0xcd,0xa7,0x35,0x47,0x60,
+0x63,0xde,0x0c,0xc8,0x6a,0x10,0x64,0x51,0x6f,0x2a,0x6b,0x63,0x9a,0x01,0x79,0x57,
+0x93,0xd4,0x55,0xd4,0x06,0x1c,0x76,0x99,0x10,0x31,0x87,0x52,0x2b,0x16,0xff,0x5b,
+0x36,0x78,0x9c,0x55,0x90,0x41,0x8e,0xc2,0x30,0x0c,0x45,0xf7,0x9c,0x22,0xca,0xbe,
+0x38,0x2d,0x2c,0x10,0x72
+};
+
+static void verify12(struct archive *a, struct archive_entry *ae)
+{
+ (void)a; /* UNUSED */
+ assertEqualInt(archive_entry_mtime_is_set(ae), 0);
+ assertEqualInt(archive_entry_atime_is_set(ae), 0);
+ assertEqualInt(archive_entry_mtime(ae), 0);
+ assertEqualInt(archive_entry_atime(ae), 0);
+}
+
+
+/*
+#How to make
+echo "onetwothree" > f1
+echo "fourfivesize" > f2
+xar -cf archive13.xar f1 f2
+od -t x1 archive13.xar | sed -E -e 's/^0[0-9]+//' | sed -E -e 's/^ //' | sed -E -e 's/( )([0-9a-f]{2})/0x\2,/g;$ D'
+*/
+
+static unsigned char archive13[] = {
+0x78,0x61,0x72,0x21,0x00,0x1c,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x31,
+0x00,0x00,0x00,0x00,0x00,0x00,0x06,0xaa,0x00,0x00,0x00,0x01,0x78,0xda,0xcc,0x95,
+0xcb,0x8e,0x9b,0x30,0x14,0x86,0xf7,0x79,0x0a,0xc4,0x9e,0xe2,0x0b,0xbe,0x10,0x39,
+0xcc,0xae,0x4f,0x30,0xdd,0x74,0x67,0xec,0x43,0x82,0x86,0x4b,0x04,0x24,0xcd,0xcc,
+0xd3,0xd7,0x36,0x30,0x69,0x34,0xd3,0x51,0xda,0x4a,0xa3,0x8a,0x05,0xbf,0x8f,0x7f,
+0x9f,0xe3,0x63,0x3e,0x64,0xf5,0x70,0x69,0x9b,0xe8,0x0c,0xc3,0x58,0xf7,0xdd,0x2e,
+0xc6,0x5f,0x50,0x1c,0x41,0x67,0x7a,0x5b,0x77,0xfb,0x5d,0xfc,0xed,0xf1,0x6b,0x22,
+0xe3,0x87,0x62,0xa3,0x2e,0x7a,0x28,0x36,0x91,0x9a,0x7a,0xe3,0x5e,0x91,0x32,0x03,
+0xe8,0xc9,0xad,0x48,0xa6,0xba,0x85,0x82,0x20,0x2c,0x13,0x44,0x12,0xc2,0x1f,0x71,
+0xbe,0xc5,0x68,0x4b,0xf3,0xef,0x2a,0xbd,0xf5,0x84,0x55,0x07,0x30,0x4f,0xe3,0xa9,
+0x8d,0xc6,0xe9,0xb9,0x81,0x5d,0x3c,0x1e,0x34,0x8e,0xfd,0x4c,0xa4,0xfa,0xaa,0x1a,
+0x61,0x2a,0x90,0x4a,0x17,0x15,0xa2,0x63,0xfd,0xe2,0xb3,0xab,0x34,0x08,0x9f,0x22,
+0x5d,0x73,0x84,0x51,0x55,0x37,0x10,0xd5,0x76,0x17,0x93,0x25,0x8d,0xd5,0x93,0x0e,
+0x2a,0x52,0x0d,0x74,0xfb,0xe9,0x10,0x56,0x2f,0x72,0x8e,0x2f,0xf9,0xb3,0xdb,0x52,
+0x4b,0x2d,0x4c,0xae,0xb5,0x5c,0x6c,0x3d,0x89,0x75,0xc3,0xfa,0x78,0x6c,0x6a,0x13,
+0xba,0x4a,0x2f,0xc9,0xfe,0xa5,0x3e,0xc6,0xe9,0x62,0xd5,0x83,0x39,0xd4,0x67,0xb0,
+0xc9,0xfb,0x4d,0x66,0x92,0x96,0x58,0x70,0x4e,0x09,0xa3,0x02,0x73,0x28,0x05,0xa9,
+0x20,0xe7,0xb9,0x34,0x98,0x94,0x0c,0x33,0x8c,0xa4,0xd5,0x22,0xd3,0x2a,0x7d,0x93,
+0x68,0xdd,0xcb,0x65,0x1a,0xb4,0x99,0x7e,0x5b,0x81,0xcb,0x9c,0xba,0x22,0x3a,0x93,
+0x40,0xb8,0x70,0x0f,0xd7,0x39,0x42,0x34,0x77,0xe9,0x89,0x28,0x2d,0xe7,0x6e,0x20,
+0xb4,0xc1,0x2a,0x7d,0x9b,0x69,0x3e,0xbc,0xf4,0xf5,0xf4,0x7c,0x31,0xf2,0x0b,0x15,
+0x8c,0x0b,0x21,0x08,0x47,0xd9,0xd2,0xae,0xd2,0xa6,0x59,0xfb,0x36,0x06,0xc6,0xb1,
+0x38,0x8d,0x30,0x6c,0xb7,0xc3,0x8f,0x64,0xb3,0x1f,0xfa,0xd3,0xd1,0xc9,0x24,0xd9,
+0xf4,0xd3,0x21,0x44,0x9d,0x74,0x7d,0xcd,0xc6,0xb9,0xd2,0xba,0x5e,0x99,0x77,0x00,
+0x42,0x72,0x8b,0x99,0x07,0x68,0x05,0x27,0x52,0xed,0x07,0xb6,0xf6,0x6a,0xd3,0x1f,
+0xd8,0xf4,0xd5,0xb6,0xaf,0x6d,0x81,0x11,0x72,0x04,0x78,0x15,0x42,0x7e,0xff,0x85,
+0xee,0x26,0x78,0x52,0x69,0xd0,0x73,0xf4,0xd5,0x78,0x5a,0x8d,0x6d,0x6f,0xa1,0x40,
+0x3c,0xcb,0x5c,0x61,0x2f,0x67,0xec,0xe0,0x5c,0x1b,0xe8,0x7a,0x57,0x9a,0x51,0x77,
+0x8e,0xeb,0x30,0x4c,0xd6,0x9d,0xf7,0xe5,0x88,0xe5,0xc2,0xc3,0x38,0x0f,0xc3,0xcc,
+0xf4,0x7c,0x84,0xc2,0x33,0xac,0xd2,0x20,0x43,0xb0,0xd3,0x6e,0x9b,0x95,0xe3,0x30,
+0x88,0xc0,0xbc,0xb7,0xdc,0xf2,0x8e,0xff,0x98,0x77,0xf2,0xc9,0xbc,0x3b,0x98,0x31,
+0x94,0x3c,0x67,0x8e,0xfb,0x8c,0x49,0xc0,0xd2,0x20,0xcc,0x40,0x0b,0x69,0x08,0x35,
+0xbc,0x92,0xc2,0x7d,0x25,0x66,0xff,0x9e,0x77,0x60,0x19,0xa6,0xd6,0xd2,0x4c,0xd3,
+0x8a,0x72,0x6b,0x44,0x25,0x01,0xa8,0x75,0xbf,0x81,0x81,0x32,0xd3,0xbc,0xd2,0xa2,
+0xc4,0xc4,0xfe,0x13,0xef,0xf4,0xd3,0x78,0x47,0xf7,0xf1,0x8e,0xee,0xe3,0x1d,0xfd,
+0x27,0xbc,0xe3,0xfc,0x5e,0xde,0xf1,0x3b,0xbc,0x3b,0x97,0xbf,0x6e,0x54,0x1a,0x2e,
+0x9f,0x9f,0x00,0x00,0x00,0xff,0xff,0x03,0x00,0xe5,0xbe,0xed,0xcc,0x2a,0x10,0x73,
+0x9e,0x84,0x13,0x2e,0x27,0xe1,0x8d,0x6f,0xf8,0x9e,0xae,0xd0,0x0a,0x8f,0x2a,0xca,
+0xf7,0x78,0xda,0xcb,0xcf,0x4b,0x2d,0x29,0xcf,0x2f,0xc9,0x28,0x4a,0x4d,0xe5,0x02,
+0x00,0x21,0x4c,0x04,0xbf,0x78,0xda,0x4b,0xcb,0x2f,0x2d,0x4a,0xcb,0x2c,0x4b,0x2d,
+0xce,0xac,0xe0,0x02,0x00,0x20,0xfa,0x04,0xc5
+};
+
enum enc {
GZIP,
BZIP2
@@ -685,6 +796,55 @@ static void verify(unsigned char *d, size_t s,
free(buff);
}
+static void verifyB(unsigned char *d, size_t s) {
+ struct archive* a;
+ struct archive_entry *entry = NULL;
+ la_int64_t buf_size;
+ unsigned char *buf;
+
+ assert((a = archive_read_new()) != NULL);
+
+ if(ARCHIVE_OK != archive_read_support_filter_gzip(a)) {
+ skipping("Unsupported gzip");
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ return;
+ }
+
+ if(ARCHIVE_OK != archive_read_support_filter_bzip2(a)) {
+ skipping("Unsupported bzip2");
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ return;
+ }
+
+ if(ARCHIVE_OK != archive_read_support_format_xar(a)) {
+ skipping("Unsupported xar");
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ return;
+ }
+
+ assertA(0 == archive_read_open_memory(a, d, s));
+
+ // f1, content "onetwothree\n", size 12 bytes
+ assertA(0 == archive_read_next_header(a, &entry));
+ buf_size = archive_entry_size(entry);
+ assertA(buf_size == 12);
+ buf = (unsigned char*) malloc(buf_size);
+ assertA(NULL != buf);
+ assertA(buf_size == archive_read_data(a, buf, buf_size));
+ free(buf);
+
+ // f2, content "fourfivesix\n", size 12 bytes
+ assertA(0 == archive_read_next_header(a, &entry));
+ buf_size = archive_entry_size(entry);
+ assertA(buf_size == 12);
+ buf = (unsigned char*) malloc(buf_size);
+ assertA(NULL != buf);
+ assertA(buf_size == archive_read_data(a, buf, buf_size));
+ free(buf);
+
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
DEFINE_TEST(test_read_format_xar)
{
verify(archive1, sizeof(archive1), verify0, verify1, GZIP);
@@ -698,5 +858,6 @@ DEFINE_TEST(test_read_format_xar)
verify(archive9, sizeof(archive9), verify0, NULL, GZIP);
verify(archive10, sizeof(archive10), verify0, NULL, GZIP);
verify(archive11, sizeof(archive11), verify0, NULL, GZIP);
+ verify(archive12, sizeof(archive12), verify12, NULL, GZIP);
+ verifyB(archive13, sizeof(archive13));
}
-
diff --git a/tar/bsdtar.c b/tar/bsdtar.c
index 963bd4f9ad5e..e70b3929dea4 100644
--- a/tar/bsdtar.c
+++ b/tar/bsdtar.c
@@ -137,6 +137,7 @@ main(int argc, char **argv)
char compression, compression2;
const char *compression_name, *compression2_name;
const char *compress_program;
+ char *tptr;
char possible_help_request;
char buff[16];
@@ -270,10 +271,15 @@ main(int argc, char **argv)
/* libarchive doesn't need this; just ignore it. */
break;
case 'b': /* SUSv2 */
- t = atoi(bsdtar->argument);
- if (t <= 0 || t > 8192)
- lafe_errc(1, 0,
- "Argument to -b is out of range (1..8192)");
+ errno = 0;
+ tptr = NULL;
+ t = (int)strtol(bsdtar->argument, &tptr, 10);
+ if (errno || t <= 0 || t > 8192 ||
+ *(bsdtar->argument) == '\0' || tptr == NULL ||
+ *tptr != '\0') {
+ lafe_errc(1, 0, "Invalid or out of range "
+ "(1..8192) argument to -b");
+ }
bsdtar->bytes_per_block = 512 * t;
/* Explicit -b forces last block size. */
bsdtar->bytes_in_last_block = bsdtar->bytes_per_block;
@@ -324,10 +330,13 @@ main(int argc, char **argv)
bsdtar->filename = bsdtar->argument;
break;
case OPTION_GID: /* cpio */
- t = atoi(bsdtar->argument);
- if (t < 0)
- lafe_errc(1, 0,
- "Argument to --gid must be positive");
+ errno = 0;
+ tptr = NULL;
+ t = (int)strtol(bsdtar->argument, &tptr, 10);
+ if (errno || t < 0 || *(bsdtar->argument) == '\0' ||
+ tptr == NULL || *tptr != '\0') {
+ lafe_errc(1, 0, "Invalid argument to --gid");
+ }
bsdtar->gid = t;
break;
case OPTION_GNAME: /* cpio */
@@ -623,12 +632,14 @@ main(int argc, char **argv)
break;
case OPTION_STRIP_COMPONENTS: /* GNU tar 1.15 */
errno = 0;
- bsdtar->strip_components = strtol(bsdtar->argument,
- NULL, 0);
- if (errno)
- lafe_errc(1, 0,
- "Invalid --strip-components argument: %s",
- bsdtar->argument);
+ tptr = NULL;
+ t = (int)strtol(bsdtar->argument, &tptr, 10);
+ if (errno || t < 0 || *(bsdtar->argument) == '\0' ||
+ tptr == NULL || *tptr != '\0') {
+ lafe_errc(1, 0, "Invalid argument to "
+ "--strip-components");
+ }
+ bsdtar->strip_components = t;
break;
case 'T': /* GNU tar */
bsdtar->names_from_file = bsdtar->argument;
@@ -648,10 +659,13 @@ main(int argc, char **argv)
set_mode(bsdtar, opt);
break;
case OPTION_UID: /* cpio */
- t = atoi(bsdtar->argument);
- if (t < 0)
- lafe_errc(1, 0,
- "Argument to --uid must be positive");
+ errno = 0;
+ tptr = NULL;
+ t = (int)strtol(bsdtar->argument, &tptr, 10);
+ if (errno || t < 0 || *(bsdtar->argument) == '\0' ||
+ tptr == NULL || *tptr != '\0') {
+ lafe_errc(1, 0, "Invalid argument to --uid");
+ }
bsdtar->uid = t;
break;
case OPTION_UNAME: /* cpio */
diff --git a/test_utils/test_main.c b/test_utils/test_main.c
index 2ff942c84a44..bb71217b232c 100644
--- a/test_utils/test_main.c
+++ b/test_utils/test_main.c
@@ -3260,7 +3260,11 @@ test_summarize(int failed, int skips_num)
static int
test_run(int i, const char *tmpdir)
{
+#ifdef PATH_MAX
+ char workdir[PATH_MAX];
+#else
char workdir[1024];
+#endif
char logfilename[64];
int failures_before = failures;
int skips_before = skips;
@@ -3509,8 +3513,13 @@ main(int argc, char **argv)
const char *progname;
char **saved_argv;
const char *tmp, *option_arg, *p;
- char tmpdir[256], *pwd, *testprogdir, *tmp2 = NULL, *vlevel = NULL;
- char tmpdir_timestamp[256];
+#ifdef PATH_MAX
+ char tmpdir[PATH_MAX];
+#else
+ char tmpdir[256];
+#endif
+ char *pwd, *testprogdir, *tmp2 = NULL, *vlevel = NULL;
+ char tmpdir_timestamp[32];
(void)argc; /* UNUSED */
@@ -3734,8 +3743,15 @@ main(int argc, char **argv)
strftime(tmpdir_timestamp, sizeof(tmpdir_timestamp),
"%Y-%m-%dT%H.%M.%S",
localtime(&now));
- sprintf(tmpdir, "%s/%s.%s-%03d", tmp, progname,
- tmpdir_timestamp, i);
+ if ((strlen(tmp) + 1 + strlen(progname) + 1 +
+ strlen(tmpdir_timestamp) + 1 + 3) >
+ (sizeof(tmpdir) / sizeof(char))) {
+ fprintf(stderr,
+ "ERROR: Temp directory pathname too long\n");
+ exit(1);
+ }
+ snprintf(tmpdir, sizeof(tmpdir), "%s/%s.%s-%03d", tmp,
+ progname, tmpdir_timestamp, i);
if (assertMakeDir(tmpdir,0755))
break;
if (i >= 999) {