From 646285eedae8c42d2ce86d5fc91af4cf935009fa Mon Sep 17 00:00:00 2001 From: Julien Voisin Date: Fri, 14 Oct 2022 18:56:28 +0200 Subject: [PATCH] Simplify libarchive's fuzzer (#8781) Co-authored-by: Julien Voisin --- projects/libarchive/libarchive_fuzzer.cc | 26 +++++------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/projects/libarchive/libarchive_fuzzer.cc b/projects/libarchive/libarchive_fuzzer.cc index 6e4c3b9d5..8b7cce428 100644 --- a/projects/libarchive/libarchive_fuzzer.cc +++ b/projects/libarchive/libarchive_fuzzer.cc @@ -20,23 +20,7 @@ #include "archive.h" #include "archive_entry.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(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); @@ -48,13 +32,12 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len) { return 0; } - Buffer buffer = {buf, len}; - archive_read_open(a, &buffer, NULL, reader_callback, NULL); + archive_read_open_memory(a, buf, len); - std::vector data_buffer(getpagesize(), 0); - struct archive_entry *entry; while(1) { - ret = archive_read_next_header(a, &entry); + std::vector data_buffer(getpagesize(), 0); + struct archive_entry *entry; + int ret = archive_read_next_header(a, &entry); if (ret == ARCHIVE_EOF || ret == ARCHIVE_FATAL) break; if (ret == ARCHIVE_RETRY) @@ -76,6 +59,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len) { (void)archive_entry_uid(entry); (void)archive_entry_mtime(entry); + ssize_t r; while ((r = archive_read_data(a, data_buffer.data(), data_buffer.size())) > 0) ;