From ec4321068b9de1ea2730b8a62dda7cb23d064303 Mon Sep 17 00:00:00 2001 From: Garret Rieger Date: Mon, 19 Apr 2021 17:18:05 -0700 Subject: [PATCH] [subset] fix infinite loop caused by alloc failure in repacker. Fixes: https://oss-fuzz.com/testcase-detail/5609112151916544. --- src/hb-repacker.hh | 8 ++++---- ...-minimized-hb-subset-fuzzer-5609112151916544 | Bin 0 -> 80225 bytes 2 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5609112151916544 diff --git a/src/hb-repacker.hh b/src/hb-repacker.hh index 3accabb11..6211dedb9 100644 --- a/src/hb-repacker.hh +++ b/src/hb-repacker.hh @@ -227,10 +227,10 @@ struct graph_t hb_vector_t queue; hb_vector_t sorted_graph; hb_vector_t id_map; - check_success (id_map.resize (vertices_.length)); + if (unlikely (!check_success (id_map.resize (vertices_.length)))) return; hb_vector_t removed_edges; - check_success (removed_edges.resize (vertices_.length)); + if (unlikely (!check_success (removed_edges.resize (vertices_.length)))) return; update_incoming_edge_count (); queue.push (root_idx ()); @@ -284,10 +284,10 @@ struct graph_t hb_priority_queue_t queue; hb_vector_t sorted_graph; hb_vector_t id_map; - check_success (id_map.resize (vertices_.length)); + if (unlikely (!check_success (id_map.resize (vertices_.length)))) return; hb_vector_t removed_edges; - check_success (removed_edges.resize (vertices_.length)); + if (unlikely (!check_success (removed_edges.resize (vertices_.length)))) return; update_incoming_edge_count (); queue.insert (root ().modified_distance (0), root_idx ()); diff --git a/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5609112151916544 b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5609112151916544 new file mode 100644 index 0000000000000000000000000000000000000000..0a9ce89d9b001e24a38e75f7e40d671b8e96bf62 GIT binary patch literal 80225 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