xref: /aosp_15_r20/external/harfbuzz_ng/test/fuzzing/hb-fuzzer.hh (revision 2d1272b857b1f7575e6e246373e1cb218663db8a)
1 #include <hb-config.hh>
2 
3 #include <hb.h>
4 #include <stddef.h>
5 
6 extern "C" int LLVMFuzzerTestOneInput (const uint8_t *data, size_t size);
7 
8 #if defined(__GNUC__) && (__GNUC__ >= 4) || (__clang__)
9 #define HB_UNUSED	__attribute__((unused))
10 #else
11 #define HB_UNUSED
12 #endif
13 
14 #ifdef HB_IS_IN_FUZZER
15 
16 /* See src/failing-alloc.c */
17 extern "C" int alloc_state;
18 
19 #else
20 
21 /* Just a dummy global variable */
22 static int HB_UNUSED alloc_state = 0;
23 
24 #endif
25 
26 static inline int
_fuzzing_alloc_state(const uint8_t * data,size_t size)27 _fuzzing_alloc_state (const uint8_t *data, size_t size)
28 {
29   /* https://github.com/harfbuzz/harfbuzz/pull/2764#issuecomment-1172589849 */
30 
31   /* In 50% of the runs, don't fail the allocator. */
32   if (size && data[size - 1] < 0x80)
33     return 0;
34 
35   return size;
36 }
37