Limit maximum number of IVs on a shape

Create SHAPE_MAX_NUM_IVS (currently 50) and limit all shapes to that
number of IVs. When a shape has more than 50 IVs, fallback to the
obj_too_complex shape which uses hash lookup for ivs.
This commit is contained in:
Jemma Issroff 2023-01-25 13:45:32 -05:00 коммит произвёл Aaron Patterson
Родитель 5e1e5af2e7
Коммит 78fcc9847a
2 изменённых файлов: 2 добавлений и 1 удалений

Просмотреть файл

@ -139,7 +139,7 @@ get_next_shape_internal(rb_shape_t * shape, ID id, enum shape_type shape_type, b
*variation_created = false;
if (new_shapes_allowed) {
if (new_shapes_allowed && shape->next_iv_index < SHAPE_MAX_NUM_IVS) {
RB_VM_LOCK_ENTER();
{
bool had_edges = !!shape->edges;

Просмотреть файл

@ -31,6 +31,7 @@ typedef uint16_t shape_id_t;
# define SHAPE_BITMAP_SIZE 16384
# define SHAPE_MAX_VARIATIONS 8
# define SHAPE_MAX_NUM_IVS 50
# define MAX_SHAPE_ID (SHAPE_MASK - 1)
# define INVALID_SHAPE_ID SHAPE_MASK