summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griebl <robert.griebl@qt.io>2023-02-22 13:42:20 +0100
committerRobert Griebl <robert.griebl@qt.io>2023-02-22 14:49:32 +0100
commit6f0eed2f383fdac97e33e01f67fba90260426353 (patch)
tree7eb9344565639d0921f58125b3b77428e7c879cf
parentfd900784f41711c500369e1c39e46c73e95878cb (diff)
downloadqtapplicationmanager-6f0eed2f383fdac97e33e01f67fba90260426353.tar.gz
Update libarchive 3rd-party code from 3.6.1 to 3.6.2
Change-Id: I4b40a2f820e52bdfa8c4165b7a10b25d7e941e17 Pick-to: 6.5 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
-rw-r--r--src/3rdparty/libarchive/libarchive/archive.h6
-rw-r--r--src/3rdparty/libarchive/libarchive/archive_entry.c14
-rw-r--r--src/3rdparty/libarchive/libarchive/archive_entry.h4
-rw-r--r--src/3rdparty/libarchive/libarchive/archive_platform.h3
-rw-r--r--src/3rdparty/libarchive/libarchive/archive_read_disk_posix.c7
-rw-r--r--src/3rdparty/libarchive/libarchive/archive_read_disk_windows.c18
-rw-r--r--src/3rdparty/libarchive/libarchive/archive_read_support_filter_xz.c2
-rw-r--r--src/3rdparty/libarchive/libarchive/archive_read_support_format_tar.c20
-rw-r--r--src/3rdparty/libarchive/libarchive/archive_string.c6
-rw-r--r--src/3rdparty/libarchive/libarchive/archive_write.c8
-rw-r--r--src/3rdparty/libarchive/libarchive/archive_write_disk_posix.c4
-rw-r--r--src/3rdparty/libarchive/libarchive/archive_write_disk_windows.c6
-rw-r--r--src/3rdparty/libarchive/libarchive/filter_fork_posix.c2
-rw-r--r--src/3rdparty/libarchive/qt_attribution.json2
14 files changed, 80 insertions, 22 deletions
diff --git a/src/3rdparty/libarchive/libarchive/archive.h b/src/3rdparty/libarchive/libarchive/archive.h
index 46041eb0..217ac198 100644
--- a/src/3rdparty/libarchive/libarchive/archive.h
+++ b/src/3rdparty/libarchive/libarchive/archive.h
@@ -36,7 +36,7 @@
* assert that ARCHIVE_VERSION_NUMBER >= 2012108.
*/
/* Note: Compiler will complain if this does not match archive_entry.h! */
-#define ARCHIVE_VERSION_NUMBER 3006001
+#define ARCHIVE_VERSION_NUMBER 3006002
#include <sys/stat.h>
#include <stddef.h> /* for wchar_t */
@@ -120,6 +120,8 @@ typedef ssize_t la_ssize_t;
# define __LA_DECL __declspec(dllimport)
# endif
# endif
+#elif defined __LIBARCHIVE_ENABLE_VISIBILITY
+# define __LA_DECL __attribute__((visibility("default")))
#else
/* Static libraries or non-Windows needs no special declaration. */
# define __LA_DECL
@@ -155,7 +157,7 @@ __LA_DECL int archive_version_number(void);
/*
* Textual name/version of the library, useful for version displays.
*/
-#define ARCHIVE_VERSION_ONLY_STRING "3.6.1"
+#define ARCHIVE_VERSION_ONLY_STRING "3.6.2"
#define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
__LA_DECL const char * archive_version_string(void);
diff --git a/src/3rdparty/libarchive/libarchive/archive_entry.c b/src/3rdparty/libarchive/libarchive/archive_entry.c
index ca7a4bdb..ae6dc333 100644
--- a/src/3rdparty/libarchive/libarchive/archive_entry.c
+++ b/src/3rdparty/libarchive/libarchive/archive_entry.c
@@ -568,6 +568,13 @@ archive_entry_nlink(struct archive_entry *entry)
return (entry->ae_stat.aest_nlink);
}
+/* Instead, our caller could have chosen a specific encoding
+ * (archive_mstring_get_mbs, archive_mstring_get_utf8,
+ * archive_mstring_get_wcs). So we should try multiple
+ * encodings. Try mbs first because of history, even though
+ * utf8 might be better for pathname portability.
+ * Also omit wcs because of type mismatch (char * versus wchar *)
+ */
const char *
archive_entry_pathname(struct archive_entry *entry)
{
@@ -575,6 +582,13 @@ archive_entry_pathname(struct archive_entry *entry)
if (archive_mstring_get_mbs(
entry->archive, &entry->ae_pathname, &p) == 0)
return (p);
+#if HAVE_EILSEQ /*{*/
+ if (errno == EILSEQ) {
+ if (archive_mstring_get_utf8(
+ entry->archive, &entry->ae_pathname, &p) == 0)
+ return (p);
+ }
+#endif /*}*/
if (errno == ENOMEM)
__archive_errx(1, "No memory");
return (NULL);
diff --git a/src/3rdparty/libarchive/libarchive/archive_entry.h b/src/3rdparty/libarchive/libarchive/archive_entry.h
index d5cb30de..e579e9f3 100644
--- a/src/3rdparty/libarchive/libarchive/archive_entry.h
+++ b/src/3rdparty/libarchive/libarchive/archive_entry.h
@@ -30,7 +30,7 @@
#define ARCHIVE_ENTRY_H_INCLUDED
/* Note: Compiler will complain if this does not match archive.h! */
-#define ARCHIVE_VERSION_NUMBER 3006001
+#define ARCHIVE_VERSION_NUMBER 3006002
/*
* Note: archive_entry.h is for use outside of libarchive; the
@@ -122,6 +122,8 @@ typedef ssize_t la_ssize_t;
# define __LA_DECL __declspec(dllimport)
# endif
# endif
+#elif defined __LIBARCHIVE_ENABLE_VISIBILITY
+# define __LA_DECL __attribute__((visibility("default")))
#else
/* Static libraries on all platforms and shared libraries on non-Windows. */
# define __LA_DECL
diff --git a/src/3rdparty/libarchive/libarchive/archive_platform.h b/src/3rdparty/libarchive/libarchive/archive_platform.h
index 3426975d..1038932a 100644
--- a/src/3rdparty/libarchive/libarchive/archive_platform.h
+++ b/src/3rdparty/libarchive/libarchive/archive_platform.h
@@ -195,8 +195,9 @@
/*
* glibc 2.24 deprecates readdir_r
+ * bionic c deprecates readdir_r too
*/
-#if defined(HAVE_READDIR_R) && (!defined(__GLIBC__) || !defined(__GLIBC_MINOR__) || __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 24))
+#if defined(HAVE_READDIR_R) && (!defined(__GLIBC__) || !defined(__GLIBC_MINOR__) || __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 24)) && (!defined(__ANDROID__))
#define USE_READDIR_R 1
#else
#undef USE_READDIR_R
diff --git a/src/3rdparty/libarchive/libarchive/archive_read_disk_posix.c b/src/3rdparty/libarchive/libarchive/archive_read_disk_posix.c
index 2b39e672..5a94ec5d 100644
--- a/src/3rdparty/libarchive/libarchive/archive_read_disk_posix.c
+++ b/src/3rdparty/libarchive/libarchive/archive_read_disk_posix.c
@@ -34,9 +34,6 @@ __FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
-#ifdef HAVE_SYS_MOUNT_H
-#include <sys/mount.h>
-#endif
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
@@ -54,6 +51,8 @@ __FBSDID("$FreeBSD$");
#endif
#ifdef HAVE_LINUX_FS_H
#include <linux/fs.h>
+#elif HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
#endif
/*
* Some Linux distributions have both linux/ext2_fs.h and ext2fs/ext2_fs.h.
@@ -2103,6 +2102,8 @@ tree_push(struct tree *t, const char *path, int filesystem_id,
struct tree_entry *te;
te = calloc(1, sizeof(*te));
+ if (te == NULL)
+ __archive_errx(1, "Out of memory");
te->next = t->stack;
te->parent = t->current;
if (te->parent)
diff --git a/src/3rdparty/libarchive/libarchive/archive_read_disk_windows.c b/src/3rdparty/libarchive/libarchive/archive_read_disk_windows.c
index ea32e2aa..f9d13955 100644
--- a/src/3rdparty/libarchive/libarchive/archive_read_disk_windows.c
+++ b/src/3rdparty/libarchive/libarchive/archive_read_disk_windows.c
@@ -418,8 +418,9 @@ la_linkname_from_pathw(const wchar_t *path, wchar_t **outbuf, int *linktype)
FILE_FLAG_OPEN_REPARSE_POINT;
int ret;
- h = CreateFileW(path, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, flag,
- NULL);
+ h = CreateFileW(path, 0,
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
+ OPEN_EXISTING, flag, NULL);
if (h == INVALID_HANDLE_VALUE) {
la_dosmaperr(GetLastError());
return (-1);
@@ -1073,7 +1074,9 @@ next_entry(struct archive_read_disk *a, struct tree *t,
else
flags |= FILE_FLAG_SEQUENTIAL_SCAN;
t->entry_fh = CreateFileW(tree_current_access_path(t),
- GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, flags, NULL);
+ GENERIC_READ,
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+ NULL, OPEN_EXISTING, flags, NULL);
if (t->entry_fh == INVALID_HANDLE_VALUE) {
la_dosmaperr(GetLastError());
archive_set_error(&a->archive, errno,
@@ -2046,7 +2049,8 @@ tree_current_file_information(struct tree *t, BY_HANDLE_FILE_INFORMATION *st,
if (sim_lstat && tree_current_is_physical_link(t))
flag |= FILE_FLAG_OPEN_REPARSE_POINT;
- h = CreateFileW(tree_current_access_path(t), 0, FILE_SHARE_READ, NULL,
+ h = CreateFileW(tree_current_access_path(t), 0,
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
OPEN_EXISTING, flag, NULL);
if (h == INVALID_HANDLE_VALUE) {
la_dosmaperr(GetLastError());
@@ -2275,7 +2279,8 @@ archive_read_disk_entry_from_file(struct archive *_a,
} else
desiredAccess = GENERIC_READ;
- h = CreateFileW(path, desiredAccess, FILE_SHARE_READ, NULL,
+ h = CreateFileW(path, desiredAccess,
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
OPEN_EXISTING, flag, NULL);
if (h == INVALID_HANDLE_VALUE) {
la_dosmaperr(GetLastError());
@@ -2337,7 +2342,8 @@ archive_read_disk_entry_from_file(struct archive *_a,
if (fd >= 0) {
h = (HANDLE)_get_osfhandle(fd);
} else {
- h = CreateFileW(path, GENERIC_READ, FILE_SHARE_READ, NULL,
+ h = CreateFileW(path, GENERIC_READ,
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (h == INVALID_HANDLE_VALUE) {
la_dosmaperr(GetLastError());
diff --git a/src/3rdparty/libarchive/libarchive/archive_read_support_filter_xz.c b/src/3rdparty/libarchive/libarchive/archive_read_support_filter_xz.c
index 32ae0be9..e313d39c 100644
--- a/src/3rdparty/libarchive/libarchive/archive_read_support_filter_xz.c
+++ b/src/3rdparty/libarchive/libarchive/archive_read_support_filter_xz.c
@@ -612,9 +612,11 @@ lzip_tail(struct archive_read_filter *self)
/* Check the crc32 value of the uncompressed data of the current
* member */
if (state->crc32 != archive_le32dec(f)) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
archive_set_error(&self->archive->archive, ARCHIVE_ERRNO_MISC,
"Lzip: CRC32 error");
return (ARCHIVE_FAILED);
+#endif
}
/* Check the uncompressed size of the current member */
diff --git a/src/3rdparty/libarchive/libarchive/archive_read_support_format_tar.c b/src/3rdparty/libarchive/libarchive/archive_read_support_format_tar.c
index bfdad7f8..93c3fd58 100644
--- a/src/3rdparty/libarchive/libarchive/archive_read_support_format_tar.c
+++ b/src/3rdparty/libarchive/libarchive/archive_read_support_format_tar.c
@@ -407,14 +407,13 @@ archive_read_format_tar_bid(struct archive_read *a, int best_bid)
/*
* Check format of mode/uid/gid/mtime/size/rdevmajor/rdevminor fields.
*/
- if (bid > 0 && (
- validate_number_field(header->mode, sizeof(header->mode)) == 0
+ if (validate_number_field(header->mode, sizeof(header->mode)) == 0
|| validate_number_field(header->uid, sizeof(header->uid)) == 0
|| validate_number_field(header->gid, sizeof(header->gid)) == 0
|| validate_number_field(header->mtime, sizeof(header->mtime)) == 0
|| validate_number_field(header->size, sizeof(header->size)) == 0
|| validate_number_field(header->rdevmajor, sizeof(header->rdevmajor)) == 0
- || validate_number_field(header->rdevminor, sizeof(header->rdevminor)) == 0)) {
+ || validate_number_field(header->rdevminor, sizeof(header->rdevminor)) == 0) {
bid = 0;
}
@@ -2108,6 +2107,21 @@ pax_attribute(struct archive_read *a, struct tar *tar,
/* "size" is the size of the data in the entry. */
tar->entry_bytes_remaining
= tar_atol10(value, strlen(value));
+ if (tar->entry_bytes_remaining < 0) {
+ tar->entry_bytes_remaining = 0;
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_MISC,
+ "Tar size attribute is negative");
+ return (ARCHIVE_FATAL);
+ }
+ if (tar->entry_bytes_remaining == INT64_MAX) {
+ /* Note: tar_atol returns INT64_MAX on overflow */
+ tar->entry_bytes_remaining = 0;
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_MISC,
+ "Tar size attribute overflow");
+ return (ARCHIVE_FATAL);
+ }
/*
* The "size" pax header keyword always overrides the
* "size" field in the tar header.
diff --git a/src/3rdparty/libarchive/libarchive/archive_string.c b/src/3rdparty/libarchive/libarchive/archive_string.c
index d7f2c46b..69458e1a 100644
--- a/src/3rdparty/libarchive/libarchive/archive_string.c
+++ b/src/3rdparty/libarchive/libarchive/archive_string.c
@@ -3988,10 +3988,10 @@ int
archive_mstring_get_mbs_l(struct archive *a, struct archive_mstring *aes,
const char **p, size_t *length, struct archive_string_conv *sc)
{
- int r, ret = 0;
-
- (void)r; /* UNUSED */
+ int ret = 0;
#if defined(_WIN32) && !defined(__CYGWIN__)
+ int r;
+
/*
* Internationalization programming on Windows must use Wide
* characters because Windows platform cannot make locale UTF-8.
diff --git a/src/3rdparty/libarchive/libarchive/archive_write.c b/src/3rdparty/libarchive/libarchive/archive_write.c
index 66592e82..27626b54 100644
--- a/src/3rdparty/libarchive/libarchive/archive_write.c
+++ b/src/3rdparty/libarchive/libarchive/archive_write.c
@@ -201,6 +201,10 @@ __archive_write_allocate_filter(struct archive *_a)
struct archive_write_filter *f;
f = calloc(1, sizeof(*f));
+
+ if (f == NULL)
+ return (NULL);
+
f->archive = _a;
f->state = ARCHIVE_WRITE_FILTER_STATE_NEW;
if (a->filter_first == NULL)
@@ -548,6 +552,10 @@ archive_write_open2(struct archive *_a, void *client_data,
a->client_data = client_data;
client_filter = __archive_write_allocate_filter(_a);
+
+ if (client_filter == NULL)
+ return (ARCHIVE_FATAL);
+
client_filter->open = archive_write_client_open;
client_filter->write = archive_write_client_write;
client_filter->close = archive_write_client_close;
diff --git a/src/3rdparty/libarchive/libarchive/archive_write_disk_posix.c b/src/3rdparty/libarchive/libarchive/archive_write_disk_posix.c
index dd7eb9a5..09a5eef0 100644
--- a/src/3rdparty/libarchive/libarchive/archive_write_disk_posix.c
+++ b/src/3rdparty/libarchive/libarchive/archive_write_disk_posix.c
@@ -1996,6 +1996,8 @@ archive_write_disk_new(void)
free(a);
return (NULL);
}
+ a->path_safe.s[0] = 0;
+
#ifdef HAVE_ZLIB_H
a->decmpfs_compression_level = 5;
#endif
@@ -2793,7 +2795,7 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
char *tail;
char *head;
int last;
- char c;
+ char c = '\0';
int r;
struct stat st;
int chdir_fd;
diff --git a/src/3rdparty/libarchive/libarchive/archive_write_disk_windows.c b/src/3rdparty/libarchive/libarchive/archive_write_disk_windows.c
index 1b12a299..88df3ce0 100644
--- a/src/3rdparty/libarchive/libarchive/archive_write_disk_windows.c
+++ b/src/3rdparty/libarchive/libarchive/archive_write_disk_windows.c
@@ -1370,6 +1370,7 @@ archive_write_disk_new(void)
free(a);
return (NULL);
}
+ a->path_safe.s[0] = 0;
return (&a->archive);
}
@@ -2154,6 +2155,8 @@ check_symlinks(struct archive_write_disk *a)
return (ARCHIVE_FAILED);
}
}
+ if (!c)
+ break;
pn[0] = c;
pn++;
}
@@ -2258,6 +2261,9 @@ cleanup_pathname(struct archive_write_disk *a, wchar_t *name)
return (ARCHIVE_FAILED);
} else
p += 4;
+ /* Network drive path like "\\<server-name>\<share-name>\file" */
+ } else if (p[0] == L'\\' && p[1] == L'\\') {
+ p += 2;
}
/* Skip leading drive letter from archives created
diff --git a/src/3rdparty/libarchive/libarchive/filter_fork_posix.c b/src/3rdparty/libarchive/libarchive/filter_fork_posix.c
index ac255c4f..62085a70 100644
--- a/src/3rdparty/libarchive/libarchive/filter_fork_posix.c
+++ b/src/3rdparty/libarchive/libarchive/filter_fork_posix.c
@@ -76,7 +76,7 @@ int
__archive_create_child(const char *cmd, int *child_stdin, int *child_stdout,
pid_t *out_child)
{
- pid_t child;
+ pid_t child = -1;
int stdin_pipe[2], stdout_pipe[2], tmp;
#if HAVE_POSIX_SPAWNP
posix_spawn_file_actions_t actions;
diff --git a/src/3rdparty/libarchive/qt_attribution.json b/src/3rdparty/libarchive/qt_attribution.json
index 7da80900..593191b8 100644
--- a/src/3rdparty/libarchive/qt_attribution.json
+++ b/src/3rdparty/libarchive/qt_attribution.json
@@ -6,7 +6,7 @@
"Description": "Multi-format archive and compression library.",
"Homepage": "https://www.libarchive.org/",
- "Version": "3.6.1",
+ "Version": "3.6.2",
"License": "BSD 2-clause \"Simplified\" License",
"LicenseId": "BSD-2-Clause",