diff options
author | Martin Matuska <mm@FreeBSD.org> | 2020-05-20 16:13:02 +0000 |
---|---|---|
committer | Martin Matuska <mm@FreeBSD.org> | 2020-05-20 16:13:02 +0000 |
commit | e117869ad30ae48ff0943c9497c626fddbc899ba (patch) | |
tree | 432435807803593d9403f8d1e831a5ce2dc5cc33 /contrib | |
parent | d0916f2d0df0ec41077369eeaefeba50e5e38b0d (diff) | |
download | src-e117869ad30ae48ff0943c9497c626fddbc899ba.tar.gz src-e117869ad30ae48ff0943c9497c626fddbc899ba.zip |
Update vendor/libarchive/dist to git fc6563f5130d8a7ee1fc27c0e55baef35119f26cvendor/libarchive/3.4.3
Libarchive 3.4.3
Relevant vendor changes:
PR #1352: support negative zstd compression levels
PR #1359: improve zstd version checking
PR #1348: support RHT.security.selinux from GNU tar
PR #1357: support for archives compressed with pzstd
PR #1367: fix issues in acl tests
PR #1372: child handling cleanup
PR #1378: fix memory leak from passphrase callback
Notes
Notes:
svn path=/vendor/libarchive/dist/; revision=361280
svn path=/vendor/libarchive/3.4.3/; revision=361281; tag=vendor/libarchive/3.4.3
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/oss-fuzz/corpus.zip | bin | 0 -> 4675 bytes | |||
-rw-r--r-- | contrib/oss-fuzz/libarchive_fuzzer.cc | 49 | ||||
-rwxr-xr-x | contrib/oss-fuzz/oss-fuzz-build.sh | 16 |
3 files changed, 65 insertions, 0 deletions
diff --git a/contrib/oss-fuzz/corpus.zip b/contrib/oss-fuzz/corpus.zip Binary files differnew file mode 100644 index 000000000000..4e9e24958246 --- /dev/null +++ b/contrib/oss-fuzz/corpus.zip diff --git a/contrib/oss-fuzz/libarchive_fuzzer.cc b/contrib/oss-fuzz/libarchive_fuzzer.cc new file mode 100644 index 000000000000..bc7f865b69c5 --- /dev/null +++ b/contrib/oss-fuzz/libarchive_fuzzer.cc @@ -0,0 +1,49 @@ +#include <stddef.h> +#include <stdint.h> +#include <vector> + +#include "archive.h" + +struct Buffer { + const uint8_t *buf; + size_t len; +}; + +ssize_t reader_callback(struct archive *a, void *client_data, + const void **block) { + Buffer *buffer = reinterpret_cast<Buffer *>(client_data); + *block = buffer->buf; + ssize_t len = buffer->len; + buffer->len = 0; + return len; +} + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len) { + int ret; + ssize_t r; + struct archive *a = archive_read_new(); + + archive_read_support_filter_all(a); + archive_read_support_format_all(a); + + Buffer buffer = {buf, len}; + archive_read_open(a, &buffer, NULL, reader_callback, NULL); + + std::vector<uint8_t> data_buffer(getpagesize(), 0); + struct archive_entry *entry; + while(1) { + ret = archive_read_next_header(a, &entry); + if (ret == ARCHIVE_EOF || ret == ARCHIVE_FATAL) + break; + if (ret == ARCHIVE_RETRY) + continue; + while ((r = archive_read_data(a, data_buffer.data(), + data_buffer.size())) > 0) + ; + if (r == ARCHIVE_FATAL) + break; + } + + archive_read_free(a); + return 0; +} diff --git a/contrib/oss-fuzz/oss-fuzz-build.sh b/contrib/oss-fuzz/oss-fuzz-build.sh new file mode 100755 index 000000000000..83d8470b13f3 --- /dev/null +++ b/contrib/oss-fuzz/oss-fuzz-build.sh @@ -0,0 +1,16 @@ +# build the project +./build/autogen.sh +./configure +make -j$(nproc) all + +# build seed +cp $SRC/libarchive/contrib/oss-fuzz/corpus.zip\ + $OUT/libarchive_fuzzer_seed_corpus.zip + +# build fuzzer(s) +$CXX $CXXFLAGS -Ilibarchive \ + $SRC/libarchive/contrib/oss-fuzz/libarchive_fuzzer.cc \ + -o $OUT/libarchive_fuzzer $LIB_FUZZING_ENGINE \ + .libs/libarchive.a -Wl,-Bstatic -lbz2 -llzo2 \ + -lxml2 -llzma -lz -lcrypto -llz4 -licuuc \ + -licudata -Wl,-Bdynamic |