summaryrefslogtreecommitdiff
path: root/Meta
diff options
context:
space:
mode:
authorTim Schumacher <timschumi@gmx.de>2023-05-19 02:01:34 +0200
committerJelle Raaijmakers <jelle@gmta.nl>2023-05-19 23:40:33 +0200
commite2ec8f6584c20b782b395441cdf8cce7ff711d1e (patch)
treec57c069ac025dcb13dd3774bf89246bedea73930 /Meta
parenta01968ee6d2a52379e5d0b202f52879018624f44 (diff)
downloadserenity-e2ec8f6584c20b782b395441cdf8cce7ff711d1e.zip
Fuzzers: Add a fuzzer for roundtrip LZMA compression/decompression
Diffstat (limited to 'Meta')
-rw-r--r--Meta/Lagom/Fuzzers/CMakeLists.txt1
-rw-r--r--Meta/Lagom/Fuzzers/FuzzLzmaRoundtrip.cpp24
2 files changed, 25 insertions, 0 deletions
diff --git a/Meta/Lagom/Fuzzers/CMakeLists.txt b/Meta/Lagom/Fuzzers/CMakeLists.txt
index 06e650a5c6..9142ced919 100644
--- a/Meta/Lagom/Fuzzers/CMakeLists.txt
+++ b/Meta/Lagom/Fuzzers/CMakeLists.txt
@@ -36,6 +36,7 @@ add_simple_fuzzer(FuzzICCProfile LibGfx)
add_simple_fuzzer(FuzzICOLoader LibGfx)
add_simple_fuzzer(FuzzJPEGLoader LibGfx)
add_simple_fuzzer(FuzzLzmaDecompression LibArchive LibCompress)
+add_simple_fuzzer(FuzzLzmaRoundtrip LibCompress)
add_simple_fuzzer(FuzzMatroskaReader LibVideo)
add_simple_fuzzer(FuzzMD5 LibCrypto)
add_simple_fuzzer(FuzzMP3Loader LibAudio)
diff --git a/Meta/Lagom/Fuzzers/FuzzLzmaRoundtrip.cpp b/Meta/Lagom/Fuzzers/FuzzLzmaRoundtrip.cpp
new file mode 100644
index 0000000000..e10c102417
--- /dev/null
+++ b/Meta/Lagom/Fuzzers/FuzzLzmaRoundtrip.cpp
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2023, Tim Schumacher <timschumi@gmx.de>.
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <AK/MemoryStream.h>
+#include <LibCompress/Lzma.h>
+
+extern "C" int LLVMFuzzerTestOneInput(uint8_t const* data, size_t size)
+{
+ AllocatingMemoryStream stream {};
+
+ auto compressor = MUST(Compress::LzmaCompressor::create_container(MaybeOwned<Stream> { stream }, {}));
+ MUST(compressor->write_until_depleted({ data, size }));
+ MUST(compressor->flush());
+
+ auto decompressor = MUST(Compress::LzmaDecompressor::create_from_container(MaybeOwned<Stream> { stream }));
+ auto result = MUST(decompressor->read_until_eof());
+
+ VERIFY((ReadonlyBytes { data, size }) == result.span());
+
+ return 0;
+}