aboutsummaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorMartin Matuska <mm@FreeBSD.org>2020-05-20 16:13:02 +0000
committerMartin Matuska <mm@FreeBSD.org>2020-05-20 16:13:02 +0000
commite117869ad30ae48ff0943c9497c626fddbc899ba (patch)
tree432435807803593d9403f8d1e831a5ce2dc5cc33 /contrib
parentd0916f2d0df0ec41077369eeaefeba50e5e38b0d (diff)
downloadsrc-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.zipbin0 -> 4675 bytes
-rw-r--r--contrib/oss-fuzz/libarchive_fuzzer.cc49
-rwxr-xr-xcontrib/oss-fuzz/oss-fuzz-build.sh16
3 files changed, 65 insertions, 0 deletions
diff --git a/contrib/oss-fuzz/corpus.zip b/contrib/oss-fuzz/corpus.zip
new file mode 100644
index 000000000000..4e9e24958246
--- /dev/null
+++ b/contrib/oss-fuzz/corpus.zip
Binary files differ
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