diff --git a/src/cairo-bentley-ottmann-rectangular.c b/src/cairo-bentley-ottmann-rectangular.c index 5541bdc..a6e8c31 100644 --- a/src/cairo-bentley-ottmann-rectangular.c +++ b/src/cairo-bentley-ottmann-rectangular.c @@ -554,8 +554,10 @@ sweep_line_delete_edge (sweep_line_t *sweep, edge_t *edge) if (sweep->cursor == edge) sweep->cursor = edge->prev; - edge->prev->next = edge->next; - edge->next->prev = edge->prev; + if (edge->prev) + edge->prev->next = edge->next; + if (edge->next) + edge->next->prev = edge->prev; } static inline cairo_bool_t @@ -565,6 +567,7 @@ sweep_line_delete (sweep_line_t *sweep, rectangle_t *rectangle) update = TRUE; if (sweep->fill_rule == CAIRO_FILL_RULE_WINDING && + rectangle->left.prev && rectangle->left.prev->dir == rectangle->left.dir) { update = rectangle->left.next != &rectangle->right;