xref: /aosp_15_r20/external/angle/src/common/third_party/xxhash/xxhash_fuzzer.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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