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