| #include "hb-shape-input.hh" |
| |
| #define TEST_OT_FACE_NO_MAIN 1 |
| #include "../api/test-ot-face.c" |
| #undef TEST_OT_FACE_NO_MAIN |
| |
| extern "C" int LLVMFuzzerTestOneInput (const uint8_t *data, size_t size) |
| { |
| _fuzzing_skip_leading_comment (&data, &size); |
| alloc_state = _fuzzing_alloc_state (data, size); |
| |
| _fuzzing_shape_input_t input; |
| switch (_fuzzing_prepare_shape_input (data, size, 12, 12, &input)) |
| { |
| case HB_FUZZING_SHAPE_INPUT_MALFORMED: |
| return 0; |
| case HB_FUZZING_SHAPE_INPUT_RAW: |
| case HB_FUZZING_SHAPE_INPUT_EXTENDED: |
| break; |
| } |
| |
| { |
| hb_buffer_t *buffer = hb_buffer_create (); |
| hb_buffer_set_flags (buffer, (hb_buffer_flags_t) (HB_BUFFER_FLAG_VERIFY)); |
| hb_buffer_add_utf8 (buffer, "ABCDEXYZ123@_%&)*$!", -1, 0, -1); |
| hb_buffer_guess_segment_properties (buffer); |
| hb_shape (input.font, buffer, nullptr, 0); |
| hb_buffer_destroy (buffer); |
| } |
| |
| uint32_t text32[16] = {0}; |
| unsigned int len = input.text.size () > 16 ? 16 : (unsigned int) input.text.size (); |
| for (unsigned int i = 0; i < len; i++) |
| text32[i] = input.text[i]; |
| |
| text32[10] = test_font (input.font, text32[15]) % 256; |
| |
| hb_buffer_t *buffer = hb_buffer_create (); |
| hb_buffer_add_utf32 (buffer, text32, sizeof (text32) / sizeof (text32[0]), 0, -1); |
| hb_buffer_guess_segment_properties (buffer); |
| hb_shape (input.font, buffer, nullptr, 0); |
| hb_buffer_destroy (buffer); |
| |
| return 0; |
| } |