<div dir="ltr"><div>Hello,<br><br></div><div>First of all, million thanks for this beautiful library!<br></div>I have encountered a crash in _fill_xrgb32_lerp_opaque_spans (cairo 1.14.0, pixman 0.32.6):<br><br>I had to replace if (len--) to if (len-- > 0) to let our program run.<br><br>static cairo_status_t<br>_fill_xrgb32_lerp_opaque_spans (void *abstract_renderer, int y, int h,<br>                const cairo_half_open_span_t *spans, unsigned num_spans)<br>{<br>    cairo_image_span_renderer_t *r = abstract_renderer;<br><br>    if (num_spans == 0)<br>    return CAIRO_STATUS_SUCCESS;<br><br>    if (likely(h == 1)) {<br>    do {<br>        uint8_t a = spans[0].coverage;<br>        if (a) {<br>        int len = spans[1].x - spans[0].x; // = -1 causing a crash<br>        uint32_t *d = (uint32_t*)(r->u.fill.data + r->u.fill.stride*y + spans[0].x*4);<br>        if (a == 0xff) {<br>            if (len > 31) {<br>            pixman_fill ((uint32_t *)r->u.fill.data, r->u.fill.stride / sizeof(uint32_t), 32,<br>                     spans[0].x, y, len, 1, r->u.fill.pixel);<br>            } else {<br>            uint32_t *d = (uint32_t*)(r->u.fill.data + r->u.fill.stride*y + spans[0].x*4);<br>            while (len-- > 0)<br>                *d++ = r->u.fill.pixel;<br>            }<br>        } else while (len-- > 0) { // crash len being negative (was -1 at the line 2238: int len = spans[1].x - spans[0].x)<br>            *d = lerp8x4 (r->u.fill.pixel, a, *d);<br>            d++;<br>        }<br>        }<br>        spans++;<div><div>....<br><br></div><div>With best regards,<br>Ilya<br></div><div><br></div></div></div>