diff --git a/src/cairo-bentley-ottmann.c b/src/cairo-bentley-ottmann.c index 634da6f1a..f30449eef 100644 --- a/src/cairo-bentley-ottmann.c +++ b/src/cairo-bentley-ottmann.c @@ -1434,12 +1434,18 @@ _active_edges_to_traps (cairo_bo_edge_t *pos, left = pos; while (pos != NULL) { if (pos != left && pos->deferred_trap.right) { - if (edges_colinear (left, pos)) { + /* XXX It shouldn't be possible to here with 2 deferred traps + * on colinear edges... See bug-bo-rictoz. + */ + if (left->deferred_trap.right == NULL && + edges_colinear (left, pos)) + { /* continuation on left */ - assert (left->deferred_trap.right == NULL); left->deferred_trap = pos->deferred_trap; pos->deferred_trap.right = NULL; - } else { + } + else + { status = _cairo_bo_edge_end_trap (pos, top, traps); if (unlikely (status)) return status;