deflate-ruby 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CLAUDE.md +95 -92
- data/LICENSE.txt +6 -6
- data/README.md +87 -65
- data/Rakefile +23 -0
- data/ext/deflate_ruby/{libdeflate/lib/x86/adler32_impl.h → adler32_impl.h} +8 -7
- data/ext/deflate_ruby/common_defs.h +748 -0
- data/ext/deflate_ruby/{libdeflate/lib/x86/cpu_features.c → cpu_features.c} +46 -16
- data/ext/deflate_ruby/{libdeflate/lib/x86/cpu_features.h → cpu_features.h} +2 -1
- data/ext/deflate_ruby/{libdeflate/lib/x86/crc32_impl.h → crc32_impl.h} +22 -23
- data/ext/deflate_ruby/{libdeflate/lib/crc32_multipliers.h → crc32_multipliers.h} +2 -4
- data/ext/deflate_ruby/{libdeflate/lib/x86/crc32_pclmul_template.h → crc32_pclmul_template.h} +23 -94
- data/ext/deflate_ruby/{libdeflate/lib/crc32_tables.h → crc32_tables.h} +1 -1
- data/ext/deflate_ruby/{libdeflate/lib/deflate_compress.c → deflate_compress.c} +59 -60
- data/ext/deflate_ruby/deflate_ruby.c +392 -218
- data/ext/deflate_ruby/deflate_ruby.h +6 -0
- data/ext/deflate_ruby/extconf.rb +35 -25
- data/ext/deflate_ruby/libdeflate/adler32.c +162 -0
- data/ext/deflate_ruby/libdeflate/{lib/arm → arm}/adler32_impl.h +14 -7
- data/ext/deflate_ruby/libdeflate/{lib/arm → arm}/crc32_impl.h +25 -31
- data/ext/deflate_ruby/libdeflate/arm/crc32_pmull_helpers.h +156 -0
- data/ext/deflate_ruby/libdeflate/arm/crc32_pmull_wide.h +226 -0
- data/ext/deflate_ruby/libdeflate/bt_matchfinder.h +342 -0
- data/ext/deflate_ruby/libdeflate/common_defs.h +2 -1
- data/ext/deflate_ruby/libdeflate/cpu_features_common.h +93 -0
- data/ext/deflate_ruby/libdeflate/crc32.c +262 -0
- data/ext/deflate_ruby/libdeflate/crc32_multipliers.h +375 -0
- data/ext/deflate_ruby/libdeflate/crc32_tables.h +587 -0
- data/ext/deflate_ruby/libdeflate/decompress_template.h +777 -0
- data/ext/deflate_ruby/libdeflate/deflate_compress.c +4128 -0
- data/ext/deflate_ruby/libdeflate/deflate_compress.h +15 -0
- data/ext/deflate_ruby/libdeflate/deflate_constants.h +56 -0
- data/ext/deflate_ruby/libdeflate/deflate_decompress.c +1208 -0
- data/ext/deflate_ruby/libdeflate/gzip_compress.c +90 -0
- data/ext/deflate_ruby/libdeflate/gzip_constants.h +45 -0
- data/ext/deflate_ruby/libdeflate/gzip_decompress.c +144 -0
- data/ext/deflate_ruby/libdeflate/hc_matchfinder.h +401 -0
- data/ext/deflate_ruby/libdeflate/ht_matchfinder.h +234 -0
- data/ext/deflate_ruby/libdeflate/lib_common.h +106 -0
- data/ext/deflate_ruby/libdeflate/libdeflate.h +2 -2
- data/ext/deflate_ruby/libdeflate/{lib/matchfinder_common.h → matchfinder_common.h} +3 -3
- data/ext/deflate_ruby/libdeflate/x86/adler32_impl.h +135 -0
- data/ext/deflate_ruby/libdeflate/x86/adler32_template.h +518 -0
- data/ext/deflate_ruby/libdeflate/x86/cpu_features.c +213 -0
- data/ext/deflate_ruby/libdeflate/x86/cpu_features.h +170 -0
- data/ext/deflate_ruby/libdeflate/x86/crc32_impl.h +159 -0
- data/ext/deflate_ruby/libdeflate/x86/crc32_pclmul_template.h +424 -0
- data/ext/deflate_ruby/libdeflate/x86/decompress_impl.h +57 -0
- data/ext/deflate_ruby/libdeflate.h +411 -0
- data/ext/deflate_ruby/matchfinder_common.h +224 -0
- data/ext/deflate_ruby/matchfinder_impl.h +122 -0
- data/ext/deflate_ruby/utils.c +141 -0
- data/ext/deflate_ruby/zlib_compress.c +82 -0
- data/ext/deflate_ruby/zlib_constants.h +21 -0
- data/ext/deflate_ruby/zlib_decompress.c +104 -0
- data/lib/deflate_ruby/version.rb +1 -1
- data/lib/deflate_ruby.rb +1 -63
- data/sig/deflate_ruby.rbs +4 -0
- data/test/test_deflate_ruby.rb +220 -0
- data/test/test_helper.rb +6 -0
- metadata +89 -144
- data/ext/deflate_ruby/libdeflate/CMakeLists.txt +0 -270
- data/ext/deflate_ruby/libdeflate/NEWS.md +0 -494
- data/ext/deflate_ruby/libdeflate/README.md +0 -228
- data/ext/deflate_ruby/libdeflate/libdeflate-config.cmake.in +0 -3
- data/ext/deflate_ruby/libdeflate/libdeflate.pc.in +0 -18
- data/ext/deflate_ruby/libdeflate/programs/CMakeLists.txt +0 -105
- data/ext/deflate_ruby/libdeflate/programs/benchmark.c +0 -696
- data/ext/deflate_ruby/libdeflate/programs/checksum.c +0 -218
- data/ext/deflate_ruby/libdeflate/programs/config.h.in +0 -19
- data/ext/deflate_ruby/libdeflate/programs/gzip.c +0 -688
- data/ext/deflate_ruby/libdeflate/programs/prog_util.c +0 -521
- data/ext/deflate_ruby/libdeflate/programs/prog_util.h +0 -225
- data/ext/deflate_ruby/libdeflate/programs/test_checksums.c +0 -200
- data/ext/deflate_ruby/libdeflate/programs/test_custom_malloc.c +0 -155
- data/ext/deflate_ruby/libdeflate/programs/test_incomplete_codes.c +0 -385
- data/ext/deflate_ruby/libdeflate/programs/test_invalid_streams.c +0 -130
- data/ext/deflate_ruby/libdeflate/programs/test_litrunlen_overflow.c +0 -72
- data/ext/deflate_ruby/libdeflate/programs/test_overread.c +0 -95
- data/ext/deflate_ruby/libdeflate/programs/test_slow_decompression.c +0 -472
- data/ext/deflate_ruby/libdeflate/programs/test_trailing_bytes.c +0 -151
- data/ext/deflate_ruby/libdeflate/programs/test_util.c +0 -237
- data/ext/deflate_ruby/libdeflate/programs/test_util.h +0 -61
- data/ext/deflate_ruby/libdeflate/programs/tgetopt.c +0 -118
- data/ext/deflate_ruby/libdeflate/scripts/android_build.sh +0 -118
- data/ext/deflate_ruby/libdeflate/scripts/android_tests.sh +0 -69
- data/ext/deflate_ruby/libdeflate/scripts/benchmark.sh +0 -10
- data/ext/deflate_ruby/libdeflate/scripts/checksum.sh +0 -10
- data/ext/deflate_ruby/libdeflate/scripts/checksum_benchmarks.sh +0 -253
- data/ext/deflate_ruby/libdeflate/scripts/cmake-helper.sh +0 -17
- data/ext/deflate_ruby/libdeflate/scripts/deflate_benchmarks.sh +0 -119
- data/ext/deflate_ruby/libdeflate/scripts/exec_tests.sh +0 -38
- data/ext/deflate_ruby/libdeflate/scripts/gen-release-archives.sh +0 -37
- data/ext/deflate_ruby/libdeflate/scripts/gen_bitreverse_tab.py +0 -19
- data/ext/deflate_ruby/libdeflate/scripts/gen_crc32_multipliers.c +0 -199
- data/ext/deflate_ruby/libdeflate/scripts/gen_crc32_tables.c +0 -105
- data/ext/deflate_ruby/libdeflate/scripts/gen_default_litlen_costs.py +0 -44
- data/ext/deflate_ruby/libdeflate/scripts/gen_offset_slot_map.py +0 -29
- data/ext/deflate_ruby/libdeflate/scripts/gzip_tests.sh +0 -523
- data/ext/deflate_ruby/libdeflate/scripts/libFuzzer/deflate_compress/corpus/0 +0 -0
- data/ext/deflate_ruby/libdeflate/scripts/libFuzzer/deflate_compress/fuzz.c +0 -95
- data/ext/deflate_ruby/libdeflate/scripts/libFuzzer/deflate_decompress/corpus/0 +0 -3
- data/ext/deflate_ruby/libdeflate/scripts/libFuzzer/deflate_decompress/fuzz.c +0 -62
- data/ext/deflate_ruby/libdeflate/scripts/libFuzzer/fuzz.sh +0 -108
- data/ext/deflate_ruby/libdeflate/scripts/libFuzzer/gzip_decompress/corpus/0 +0 -0
- data/ext/deflate_ruby/libdeflate/scripts/libFuzzer/gzip_decompress/fuzz.c +0 -19
- data/ext/deflate_ruby/libdeflate/scripts/libFuzzer/zlib_decompress/corpus/0 +0 -3
- data/ext/deflate_ruby/libdeflate/scripts/libFuzzer/zlib_decompress/fuzz.c +0 -19
- data/ext/deflate_ruby/libdeflate/scripts/run_tests.sh +0 -416
- data/ext/deflate_ruby/libdeflate/scripts/toolchain-i686-w64-mingw32.cmake +0 -8
- data/ext/deflate_ruby/libdeflate/scripts/toolchain-x86_64-w64-mingw32.cmake +0 -8
- /data/ext/deflate_ruby/{libdeflate/lib/adler32.c → adler32.c} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/x86/adler32_template.h → adler32_template.h} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/bt_matchfinder.h → bt_matchfinder.h} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/cpu_features_common.h → cpu_features_common.h} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/crc32.c → crc32.c} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/arm/crc32_pmull_helpers.h → crc32_pmull_helpers.h} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/arm/crc32_pmull_wide.h → crc32_pmull_wide.h} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/x86/decompress_impl.h → decompress_impl.h} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/decompress_template.h → decompress_template.h} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/deflate_compress.h → deflate_compress.h} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/deflate_constants.h → deflate_constants.h} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/deflate_decompress.c → deflate_decompress.c} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/gzip_compress.c → gzip_compress.c} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/gzip_constants.h → gzip_constants.h} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/gzip_decompress.c → gzip_decompress.c} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/hc_matchfinder.h → hc_matchfinder.h} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/ht_matchfinder.h → ht_matchfinder.h} +0 -0
- /data/ext/deflate_ruby/{libdeflate/lib/lib_common.h → lib_common.h} +0 -0
- /data/ext/deflate_ruby/libdeflate/{lib/arm → arm}/cpu_features.c +0 -0
- /data/ext/deflate_ruby/libdeflate/{lib/arm → arm}/cpu_features.h +0 -0
- /data/ext/deflate_ruby/libdeflate/{lib/arm → arm}/matchfinder_impl.h +0 -0
- /data/ext/deflate_ruby/libdeflate/{lib/riscv → riscv}/matchfinder_impl.h +0 -0
- /data/ext/deflate_ruby/libdeflate/{lib/utils.c → utils.c} +0 -0
- /data/ext/deflate_ruby/libdeflate/{lib/x86 → x86}/matchfinder_impl.h +0 -0
- /data/ext/deflate_ruby/libdeflate/{lib/zlib_compress.c → zlib_compress.c} +0 -0
- /data/ext/deflate_ruby/libdeflate/{lib/zlib_constants.h → zlib_constants.h} +0 -0
- /data/ext/deflate_ruby/libdeflate/{lib/zlib_decompress.c → zlib_decompress.c} +0 -0
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
#include <assert.h>
|
|
2
|
-
#include <libdeflate.h>
|
|
3
|
-
#include <stdbool.h>
|
|
4
|
-
#include <stdint.h>
|
|
5
|
-
#include <stdlib.h>
|
|
6
|
-
#include <string.h>
|
|
7
|
-
#include <sys/mman.h>
|
|
8
|
-
#include <unistd.h>
|
|
9
|
-
|
|
10
|
-
static void
|
|
11
|
-
alloc_guarded_buffer(size_t size, uint8_t **start_ret, uint8_t **end_ret)
|
|
12
|
-
{
|
|
13
|
-
const size_t pagesize = sysconf(_SC_PAGESIZE);
|
|
14
|
-
const size_t nr_pages = (size + pagesize - 1) / pagesize;
|
|
15
|
-
uint8_t *base_addr, *start, *end;
|
|
16
|
-
|
|
17
|
-
/* Allocate buffer and guard pages. */
|
|
18
|
-
base_addr = mmap(NULL, (nr_pages + 2) * pagesize, PROT_READ|PROT_WRITE,
|
|
19
|
-
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
|
|
20
|
-
assert(base_addr != (uint8_t *)MAP_FAILED);
|
|
21
|
-
start = base_addr + pagesize;
|
|
22
|
-
end = start + (nr_pages * pagesize);
|
|
23
|
-
|
|
24
|
-
/* Unmap the guard pages. */
|
|
25
|
-
munmap(base_addr, pagesize);
|
|
26
|
-
munmap(end, pagesize);
|
|
27
|
-
|
|
28
|
-
*start_ret = start;
|
|
29
|
-
*end_ret = end;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
static void
|
|
33
|
-
free_guarded_buffer(uint8_t *start, uint8_t *end)
|
|
34
|
-
{
|
|
35
|
-
munmap(start, end - start);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/* Fuzz the DEFLATE compression and decompression round trip. */
|
|
39
|
-
int LLVMFuzzerTestOneInput(const uint8_t *in, size_t insize)
|
|
40
|
-
{
|
|
41
|
-
int level;
|
|
42
|
-
bool use_bound;
|
|
43
|
-
struct libdeflate_compressor *c;
|
|
44
|
-
struct libdeflate_decompressor *d;
|
|
45
|
-
size_t csize_avail;
|
|
46
|
-
uint8_t *ubuf_start, *ubuf_end, *ubuf;
|
|
47
|
-
uint8_t *cbuf_start, *cbuf_end, *cbuf;
|
|
48
|
-
uint8_t *dbuf_start, *dbuf_end, *dbuf;
|
|
49
|
-
size_t csize;
|
|
50
|
-
enum libdeflate_result res;
|
|
51
|
-
|
|
52
|
-
if (insize < 2)
|
|
53
|
-
return 0;
|
|
54
|
-
|
|
55
|
-
level = in[0] % 13;
|
|
56
|
-
use_bound = in[1] % 2;
|
|
57
|
-
in += 2;
|
|
58
|
-
insize -= 2;
|
|
59
|
-
|
|
60
|
-
c = libdeflate_alloc_compressor(level);
|
|
61
|
-
d = libdeflate_alloc_decompressor();
|
|
62
|
-
|
|
63
|
-
/* Use guard pages to make all input/output buffer overflows segfault */
|
|
64
|
-
|
|
65
|
-
alloc_guarded_buffer(insize, &ubuf_start, &ubuf_end);
|
|
66
|
-
ubuf = ubuf_end - insize;
|
|
67
|
-
memcpy(ubuf, in, insize);
|
|
68
|
-
|
|
69
|
-
csize_avail = use_bound ? libdeflate_deflate_compress_bound(c, insize) :
|
|
70
|
-
insize;
|
|
71
|
-
alloc_guarded_buffer(csize_avail, &cbuf_start, &cbuf_end);
|
|
72
|
-
cbuf = cbuf_end - csize_avail;
|
|
73
|
-
|
|
74
|
-
alloc_guarded_buffer(insize, &dbuf_start, &dbuf_end);
|
|
75
|
-
dbuf = dbuf_end - insize;
|
|
76
|
-
|
|
77
|
-
csize = libdeflate_deflate_compress(c, ubuf, insize, cbuf, csize_avail);
|
|
78
|
-
if (csize != 0) {
|
|
79
|
-
assert(csize <= csize_avail);
|
|
80
|
-
memmove(cbuf_end - csize, cbuf, csize);
|
|
81
|
-
res = libdeflate_deflate_decompress(d, cbuf_end - csize, csize,
|
|
82
|
-
dbuf, insize, NULL);
|
|
83
|
-
assert(res == LIBDEFLATE_SUCCESS);
|
|
84
|
-
assert(memcmp(in, dbuf, insize) == 0);
|
|
85
|
-
} else {
|
|
86
|
-
assert(!use_bound);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
libdeflate_free_compressor(c);
|
|
90
|
-
libdeflate_free_decompressor(d);
|
|
91
|
-
free_guarded_buffer(ubuf_start, ubuf_end);
|
|
92
|
-
free_guarded_buffer(cbuf_start, cbuf_end);
|
|
93
|
-
free_guarded_buffer(dbuf_start, dbuf_end);
|
|
94
|
-
return 0;
|
|
95
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
#include <assert.h>
|
|
2
|
-
#include <libdeflate.h>
|
|
3
|
-
#include <stdbool.h>
|
|
4
|
-
#include <stdint.h>
|
|
5
|
-
#include <stdlib.h>
|
|
6
|
-
#include <string.h>
|
|
7
|
-
#include <sys/mman.h>
|
|
8
|
-
#include <unistd.h>
|
|
9
|
-
|
|
10
|
-
static void
|
|
11
|
-
alloc_guarded_buffer(size_t size, uint8_t **start_ret, uint8_t **end_ret)
|
|
12
|
-
{
|
|
13
|
-
const size_t pagesize = sysconf(_SC_PAGESIZE);
|
|
14
|
-
const size_t nr_pages = (size + pagesize - 1) / pagesize;
|
|
15
|
-
uint8_t *base_addr, *start, *end;
|
|
16
|
-
|
|
17
|
-
/* Allocate buffer and guard pages. */
|
|
18
|
-
base_addr = mmap(NULL, (nr_pages + 2) * pagesize, PROT_READ|PROT_WRITE,
|
|
19
|
-
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
|
|
20
|
-
assert(base_addr != (uint8_t *)MAP_FAILED);
|
|
21
|
-
start = base_addr + pagesize;
|
|
22
|
-
end = start + (nr_pages * pagesize);
|
|
23
|
-
|
|
24
|
-
/* Unmap the guard pages. */
|
|
25
|
-
munmap(base_addr, pagesize);
|
|
26
|
-
munmap(end, pagesize);
|
|
27
|
-
|
|
28
|
-
*start_ret = start;
|
|
29
|
-
*end_ret = end;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
static void
|
|
33
|
-
free_guarded_buffer(uint8_t *start, uint8_t *end)
|
|
34
|
-
{
|
|
35
|
-
munmap(start, end - start);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/* Fuzz DEFLATE decompression. */
|
|
39
|
-
int LLVMFuzzerTestOneInput(const uint8_t *in, size_t insize)
|
|
40
|
-
{
|
|
41
|
-
size_t outsize_avail = 3 * insize;
|
|
42
|
-
uint8_t *cbuf_start, *cbuf_end, *cbuf;
|
|
43
|
-
uint8_t *dbuf_start, *dbuf_end, *dbuf;
|
|
44
|
-
struct libdeflate_decompressor *d;
|
|
45
|
-
|
|
46
|
-
/* Use guard pages to make all input/output buffer overflows segfault */
|
|
47
|
-
|
|
48
|
-
alloc_guarded_buffer(insize, &cbuf_start, &cbuf_end);
|
|
49
|
-
cbuf = cbuf_end - insize;
|
|
50
|
-
memcpy(cbuf, in, insize);
|
|
51
|
-
|
|
52
|
-
alloc_guarded_buffer(outsize_avail, &dbuf_start, &dbuf_end);
|
|
53
|
-
dbuf = dbuf_end - outsize_avail;
|
|
54
|
-
|
|
55
|
-
d = libdeflate_alloc_decompressor();
|
|
56
|
-
libdeflate_deflate_decompress(d, cbuf, insize, dbuf, outsize_avail,
|
|
57
|
-
NULL);
|
|
58
|
-
libdeflate_free_decompressor(d);
|
|
59
|
-
free_guarded_buffer(cbuf_start, cbuf_end);
|
|
60
|
-
free_guarded_buffer(dbuf_start, dbuf_end);
|
|
61
|
-
return 0;
|
|
62
|
-
}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
set -e -u -o pipefail
|
|
4
|
-
|
|
5
|
-
cd "$(dirname "$0")"
|
|
6
|
-
|
|
7
|
-
read -r -a AVAILABLE_TARGETS < <(echo */fuzz.c | sed 's@/fuzz.c@@g')
|
|
8
|
-
|
|
9
|
-
usage()
|
|
10
|
-
{
|
|
11
|
-
cat << EOF
|
|
12
|
-
Usage: $0 [OPTION]... FUZZ_TARGET
|
|
13
|
-
|
|
14
|
-
Fuzz libdeflate with LLVM's libFuzzer.
|
|
15
|
-
|
|
16
|
-
Options:
|
|
17
|
-
--asan Enable AddressSanitizer
|
|
18
|
-
--max-len=LEN Maximum length of generated inputs (default: $MAX_LEN)
|
|
19
|
-
--msan Enable MemorySanitizer
|
|
20
|
-
--time=SECONDS Stop after the given time has passed
|
|
21
|
-
--ubsan Enable UndefinedBehaviorSanitizer
|
|
22
|
-
|
|
23
|
-
Available fuzz targets: ${AVAILABLE_TARGETS[*]}
|
|
24
|
-
EOF
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
die()
|
|
28
|
-
{
|
|
29
|
-
echo "$*" 1>&2
|
|
30
|
-
exit 1
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
run_cmd()
|
|
34
|
-
{
|
|
35
|
-
echo "$*"
|
|
36
|
-
"$@"
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
EXTRA_SANITIZERS=
|
|
40
|
-
EXTRA_FUZZER_ARGS=()
|
|
41
|
-
MAX_LEN=65536
|
|
42
|
-
|
|
43
|
-
longopts_array=(
|
|
44
|
-
asan
|
|
45
|
-
help
|
|
46
|
-
max-len:
|
|
47
|
-
msan
|
|
48
|
-
time:
|
|
49
|
-
ubsan
|
|
50
|
-
)
|
|
51
|
-
longopts=$(echo "${longopts_array[@]}" | tr ' ' ',')
|
|
52
|
-
|
|
53
|
-
if ! options=$(getopt -o "" -l "$longopts" -- "$@"); then
|
|
54
|
-
usage 1>&2
|
|
55
|
-
exit 1
|
|
56
|
-
fi
|
|
57
|
-
eval set -- "$options"
|
|
58
|
-
while true; do
|
|
59
|
-
case "$1" in
|
|
60
|
-
--asan)
|
|
61
|
-
EXTRA_SANITIZERS+=",address"
|
|
62
|
-
;;
|
|
63
|
-
--help)
|
|
64
|
-
usage
|
|
65
|
-
exit 0
|
|
66
|
-
;;
|
|
67
|
-
--max-len)
|
|
68
|
-
MAX_LEN=$2
|
|
69
|
-
shift
|
|
70
|
-
;;
|
|
71
|
-
--msan)
|
|
72
|
-
EXTRA_SANITIZERS+=",memory"
|
|
73
|
-
;;
|
|
74
|
-
--time)
|
|
75
|
-
EXTRA_FUZZER_ARGS+=("-max_total_time=$2")
|
|
76
|
-
shift
|
|
77
|
-
;;
|
|
78
|
-
--ubsan)
|
|
79
|
-
EXTRA_SANITIZERS+=",undefined"
|
|
80
|
-
;;
|
|
81
|
-
--)
|
|
82
|
-
shift
|
|
83
|
-
break
|
|
84
|
-
;;
|
|
85
|
-
*)
|
|
86
|
-
echo 1>&2 "Invalid option '$1'"
|
|
87
|
-
usage 1>&2
|
|
88
|
-
exit 1
|
|
89
|
-
esac
|
|
90
|
-
shift
|
|
91
|
-
done
|
|
92
|
-
EXTRA_FUZZER_ARGS+=("-max_len=$MAX_LEN")
|
|
93
|
-
|
|
94
|
-
if (( $# != 1 )); then
|
|
95
|
-
echo 1>&2 "No fuzz target specified!"
|
|
96
|
-
usage 1>&2
|
|
97
|
-
exit 1
|
|
98
|
-
fi
|
|
99
|
-
TARGET=$1
|
|
100
|
-
if [ ! -e "$TARGET/fuzz.c" ]; then
|
|
101
|
-
echo 1>&2 "'$TARGET' is not a valid fuzz target!"
|
|
102
|
-
usage 1>&2
|
|
103
|
-
exit 1
|
|
104
|
-
fi
|
|
105
|
-
run_cmd clang -g -O1 -fsanitize=fuzzer$EXTRA_SANITIZERS \
|
|
106
|
-
-Wall -Werror -DLIBDEFLATE_ENABLE_ASSERTIONS=1 -I ../../ \
|
|
107
|
-
../../lib/*{,/*}.c "$TARGET/fuzz.c" -o "$TARGET/fuzz"
|
|
108
|
-
run_cmd "$TARGET/fuzz" "${EXTRA_FUZZER_ARGS[@]}" "$TARGET/corpus"
|
|
Binary file
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#include <libdeflate.h>
|
|
2
|
-
#include <stdint.h>
|
|
3
|
-
#include <stdlib.h>
|
|
4
|
-
|
|
5
|
-
/* Fuzz gzip decompression. */
|
|
6
|
-
int LLVMFuzzerTestOneInput(const uint8_t *in, size_t insize)
|
|
7
|
-
{
|
|
8
|
-
size_t outsize_avail = 3 * insize;
|
|
9
|
-
uint8_t *out;
|
|
10
|
-
struct libdeflate_decompressor *d;
|
|
11
|
-
|
|
12
|
-
out = malloc(outsize_avail);
|
|
13
|
-
|
|
14
|
-
d = libdeflate_alloc_decompressor();
|
|
15
|
-
libdeflate_gzip_decompress(d, in, insize, out, outsize_avail, NULL);
|
|
16
|
-
libdeflate_free_decompressor(d);
|
|
17
|
-
free(out);
|
|
18
|
-
return 0;
|
|
19
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#include <libdeflate.h>
|
|
2
|
-
#include <stdint.h>
|
|
3
|
-
#include <stdlib.h>
|
|
4
|
-
|
|
5
|
-
/* Fuzz zlib decompression. */
|
|
6
|
-
int LLVMFuzzerTestOneInput(const uint8_t *in, size_t insize)
|
|
7
|
-
{
|
|
8
|
-
size_t outsize_avail = 3 * insize;
|
|
9
|
-
uint8_t *out;
|
|
10
|
-
struct libdeflate_decompressor *d;
|
|
11
|
-
|
|
12
|
-
out = malloc(outsize_avail);
|
|
13
|
-
|
|
14
|
-
d = libdeflate_alloc_decompressor();
|
|
15
|
-
libdeflate_zlib_decompress(d, in, insize, out, outsize_avail, NULL);
|
|
16
|
-
libdeflate_free_decompressor(d);
|
|
17
|
-
free(out);
|
|
18
|
-
return 0;
|
|
19
|
-
}
|