s3: smbd: Cleanup. smb2_file_rename_information() can never have a @GMT path in the...
[Samba.git] / lib / fuzzing / fuzz_lzxpress_huffman_round_trip.c
blobb59be438ee9365ef5736a70ad609a9a45b299089
1 /*
2 Fuzzing for lzxpress_huffman{_decompress,_compress} round trip
3 Copyright (C) Michael Hanselmann 2019
4 Copyright (C) Douglas Bagnall 2022 <dbagnall@samba.org>
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
20 #include "includes.h"
21 #include "fuzzing/fuzzing.h"
22 #include "compression/lzxpress_huffman.h"
25 int LLVMFuzzerInitialize(int *argc, char ***argv)
27 return 0;
31 int LLVMFuzzerTestOneInput(uint8_t *buf, size_t len)
34 * we allow compressed to be 25% bigger than decompressed.
36 static uint8_t compressed[1024 * (1024 + 256)];
37 static uint8_t decompressed[1024 * 1024];
38 ssize_t compressed_size;
39 ssize_t decompressed_size;
40 struct lzxhuff_compressor_mem cmp;
42 if (len > sizeof(decompressed) || len == 0) {
43 return 0;
46 compressed_size = lzxpress_huffman_compress(&cmp,
47 buf,
48 len,
49 compressed,
50 sizeof(compressed));
51 if (compressed_size < 0) {
52 abort();
55 decompressed_size = lzxpress_huffman_decompress(compressed,
56 compressed_size,
57 decompressed,
58 len);
60 if (decompressed_size != len) {
61 abort();
63 if (memcmp(buf, decompressed, len) != 0) {
64 abort();
67 return 0;