1 //
2 // Copyright 2019 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // xxHash Fuzzer test:
7 // Integration with Chromium's libfuzzer for xxHash.
8
9 #include <cstddef>
10 #include <cstdint>
11 #include <cstring>
12
13 #include "xxhash.h"
14
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)15 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
16 {
17 #if !defined(XXH_NO_LONG_LONG)
18 // Test 64-bit hash.
19 unsigned long long seed64 = 0ull;
20 size_t seedSize64 = sizeof(seed64);
21 if (size >= seedSize64)
22 {
23 memcpy(&seed64, data, seedSize64);
24 }
25 else
26 {
27 seedSize64 = 0;
28 }
29 XXH64(&data[seedSize64], size - seedSize64, seed64);
30 #endif // !defined(XXH_NO_LONG_LONG)
31
32 // Test 32-bit hash.
33 unsigned int seed32 = 0u;
34 size_t seedSize32 = sizeof(seed32);
35 if (size >= seedSize32)
36 {
37 memcpy(&seed32, data, seedSize32);
38 }
39 else
40 {
41 seedSize32 = 0;
42 }
43 XXH32(&data[seedSize32], size - seedSize32, seed32);
44 return 0;
45 }
46