mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 21:05:08 +00:00
MFV r368607:
Sync libarchive with vendor. Vendor changes: Issue #1461: Unbreak build without lzma Issue #1462: warc reader: Fix build with gcc11 Issue #1463: Fix code compatibility in test_archive_read_support.c Issue #1464: Use built-in strnlen on platforms where not available Issue #1465: warc reader: fix undefined behaviour in deconst() function MFC after: 3 days X-MFC-With: 368234
This commit is contained in:
commit
87c1ec0a31
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=368608
|
@ -136,6 +136,9 @@ static int skip(struct archive_read *a);
|
||||||
static int read_header(struct archive_read *,
|
static int read_header(struct archive_read *,
|
||||||
struct archive_entry *);
|
struct archive_entry *);
|
||||||
static int64_t mtree_atol(char **, int base);
|
static int64_t mtree_atol(char **, int base);
|
||||||
|
#ifndef HAVE_STRNLEN
|
||||||
|
static size_t mtree_strnlen(const char *, size_t);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* There's no standard for TIME_T_MAX/TIME_T_MIN. So we compute them
|
* There's no standard for TIME_T_MAX/TIME_T_MIN. So we compute them
|
||||||
|
@ -187,6 +190,24 @@ get_time_t_min(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_STRNLEN
|
||||||
|
#define mtree_strnlen(a,b) strnlen(a,b)
|
||||||
|
#else
|
||||||
|
static size_t
|
||||||
|
mtree_strnlen(const char *p, size_t maxlen)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 0; i <= maxlen; i++) {
|
||||||
|
if (p[i] == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (i > maxlen)
|
||||||
|
return (-1);/* invalid */
|
||||||
|
return (i);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int
|
static int
|
||||||
archive_read_format_mtree_options(struct archive_read *a,
|
archive_read_format_mtree_options(struct archive_read *a,
|
||||||
const char *key, const char *val)
|
const char *key, const char *val)
|
||||||
|
@ -1540,7 +1561,7 @@ parse_digest(struct archive_read *a, struct archive_entry *entry,
|
||||||
|
|
||||||
len *= 2;
|
len *= 2;
|
||||||
|
|
||||||
if (strnlen(digest, len+1) != len) {
|
if (mtree_strnlen(digest, len+1) != len) {
|
||||||
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
|
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
|
||||||
"incorrect digest length, ignoring");
|
"incorrect digest length, ignoring");
|
||||||
return ARCHIVE_WARN;
|
return ARCHIVE_WARN;
|
||||||
|
|
|
@ -127,7 +127,7 @@ static int _warc_skip(struct archive_read *a);
|
||||||
static int _warc_rdhdr(struct archive_read *a, struct archive_entry *e);
|
static int _warc_rdhdr(struct archive_read *a, struct archive_entry *e);
|
||||||
|
|
||||||
/* private routines */
|
/* private routines */
|
||||||
static unsigned int _warc_rdver(const char buf[10], size_t bsz);
|
static unsigned int _warc_rdver(const char *buf, size_t bsz);
|
||||||
static unsigned int _warc_rdtyp(const char *buf, size_t bsz);
|
static unsigned int _warc_rdtyp(const char *buf, size_t bsz);
|
||||||
static warc_string_t _warc_rduri(const char *buf, size_t bsz);
|
static warc_string_t _warc_rduri(const char *buf, size_t bsz);
|
||||||
static ssize_t _warc_rdlen(const char *buf, size_t bsz);
|
static ssize_t _warc_rdlen(const char *buf, size_t bsz);
|
||||||
|
@ -443,7 +443,7 @@ _warc_skip(struct archive_read *a)
|
||||||
static void*
|
static void*
|
||||||
deconst(const void *c)
|
deconst(const void *c)
|
||||||
{
|
{
|
||||||
return (char *)0x1 + (((const char *)c) - (const char *)0x1);
|
return (void *)(uintptr_t)c;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char*
|
static char*
|
||||||
|
|
|
@ -899,6 +899,7 @@ process_extra(struct archive_read *a, struct archive_entry *entry,
|
||||||
return ARCHIVE_OK;
|
return ARCHIVE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if HAVE_LZMA_H && HAVE_LIBLZMA
|
||||||
/*
|
/*
|
||||||
* Auxiliary function to uncompress data chunk from zipx archive
|
* Auxiliary function to uncompress data chunk from zipx archive
|
||||||
* (zip with lzma compression).
|
* (zip with lzma compression).
|
||||||
|
@ -971,6 +972,7 @@ zipx_lzma_uncompress_buffer(const char *compressed_buffer,
|
||||||
free(lzma_alone_compressed_buffer);
|
free(lzma_alone_compressed_buffer);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Assumes file pointer is at beginning of local file header.
|
* Assumes file pointer is at beginning of local file header.
|
||||||
|
|
|
@ -126,7 +126,9 @@ DEFINE_TEST(test_archive_read_support)
|
||||||
ARCHIVE_FORMAT_WARC,
|
ARCHIVE_FORMAT_WARC,
|
||||||
ARCHIVE_FORMAT_RAR_V5,
|
ARCHIVE_FORMAT_RAR_V5,
|
||||||
};
|
};
|
||||||
for (unsigned i = 0; i < sizeof(format_codes) / sizeof(int); i++) {
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof(format_codes) / sizeof(int); i++) {
|
||||||
format_code = format_codes[i];
|
format_code = format_codes[i];
|
||||||
test_filter_or_format(format_code_enabler);
|
test_filter_or_format(format_code_enabler);
|
||||||
test_filter_or_format(format_code_setter);
|
test_filter_or_format(format_code_setter);
|
||||||
|
|
|
@ -183,6 +183,7 @@
|
||||||
#define HAVE_STRFTIME 1
|
#define HAVE_STRFTIME 1
|
||||||
#define HAVE_STRINGS_H 1
|
#define HAVE_STRINGS_H 1
|
||||||
#define HAVE_STRING_H 1
|
#define HAVE_STRING_H 1
|
||||||
|
#define HAVE_STRNLEN 1
|
||||||
#define HAVE_STRRCHR 1
|
#define HAVE_STRRCHR 1
|
||||||
#define HAVE_STRUCT_STATFS_F_NAMEMAX 1
|
#define HAVE_STRUCT_STATFS_F_NAMEMAX 1
|
||||||
#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1
|
#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1
|
||||||
|
|
Loading…
Reference in a new issue