diff --git a/src/hb-ot-color-colr-table.hh b/src/hb-ot-color-colr-table.hh index 0b5b22737..a3c55fa8f 100644 --- a/src/hb-ot-color-colr-table.hh +++ b/src/hb-ot-color-colr-table.hh @@ -1067,45 +1067,11 @@ struct Paint bool sanitize (hb_sanitize_context_t *c, Ts&&... ds) const { TRACE_SANITIZE (this); - if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ()); + if (unlikely (!c->check_start_recursion (HB_COLRV1_MAX_NESTING_LEVEL))) return_trace (c->no_dispatch_return_value ()); - switch (u.format) { - case 1: return_trace (c->end_recursion (c->dispatch (u.paintformat1, std::forward (ds)...))); - case 2: return_trace (c->end_recursion (c->dispatch (u.paintformat2, std::forward (ds)...))); - case 3: return_trace (c->end_recursion (c->dispatch (u.paintformat3, std::forward (ds)...))); - case 4: return_trace (c->end_recursion (c->dispatch (u.paintformat4, std::forward (ds)...))); - case 5: return_trace (c->end_recursion (c->dispatch (u.paintformat5, std::forward (ds)...))); - case 6: return_trace (c->end_recursion (c->dispatch (u.paintformat6, std::forward (ds)...))); - case 7: return_trace (c->end_recursion (c->dispatch (u.paintformat7, std::forward (ds)...))); - case 8: return_trace (c->end_recursion (c->dispatch (u.paintformat8, std::forward (ds)...))); - case 9: return_trace (c->end_recursion (c->dispatch (u.paintformat9, std::forward (ds)...))); - case 10: return_trace (c->end_recursion (c->dispatch (u.paintformat10, std::forward (ds)...))); - case 11: return_trace (c->end_recursion (c->dispatch (u.paintformat11, std::forward (ds)...))); - case 12: return_trace (c->end_recursion (c->dispatch (u.paintformat12, std::forward (ds)...))); - case 13: return_trace (c->end_recursion (c->dispatch (u.paintformat13, std::forward (ds)...))); - case 14: return_trace (c->end_recursion (c->dispatch (u.paintformat14, std::forward (ds)...))); - case 15: return_trace (c->end_recursion (c->dispatch (u.paintformat15, std::forward (ds)...))); - case 16: return_trace (c->end_recursion (c->dispatch (u.paintformat16, std::forward (ds)...))); - case 17: return_trace (c->end_recursion (c->dispatch (u.paintformat17, std::forward (ds)...))); - case 18: return_trace (c->end_recursion (c->dispatch (u.paintformat18, std::forward (ds)...))); - case 19: return_trace (c->end_recursion (c->dispatch (u.paintformat19, std::forward (ds)...))); - case 20: return_trace (c->end_recursion (c->dispatch (u.paintformat20, std::forward (ds)...))); - case 21: return_trace (c->end_recursion (c->dispatch (u.paintformat21, std::forward (ds)...))); - case 22: return_trace (c->end_recursion (c->dispatch (u.paintformat22, std::forward (ds)...))); - case 23: return_trace (c->end_recursion (c->dispatch (u.paintformat23, std::forward (ds)...))); - case 24: return_trace (c->end_recursion (c->dispatch (u.paintformat24, std::forward (ds)...))); - case 25: return_trace (c->end_recursion (c->dispatch (u.paintformat25, std::forward (ds)...))); - case 26: return_trace (c->end_recursion (c->dispatch (u.paintformat26, std::forward (ds)...))); - case 27: return_trace (c->end_recursion (c->dispatch (u.paintformat27, std::forward (ds)...))); - case 28: return_trace (c->end_recursion (c->dispatch (u.paintformat28, std::forward (ds)...))); - case 29: return_trace (c->end_recursion (c->dispatch (u.paintformat29, std::forward (ds)...))); - case 30: return_trace (c->end_recursion (c->dispatch (u.paintformat30, std::forward (ds)...))); - case 31: return_trace (c->end_recursion (c->dispatch (u.paintformat31, std::forward (ds)...))); - case 32: return_trace (c->end_recursion (c->dispatch (u.paintformat32, std::forward (ds)...))); - default:return_trace (c->end_recursion (c->default_return_value ())); - } + return_trace (c->end_recursion (this->dispatch (c, std::forward (ds)...))); } template