diff --git a/src/sna/sna.h b/src/sna/sna.h index ff1c9c11..b5bebe80 100644 --- a/src/sna/sna.h +++ b/src/sna/sna.h @@ -1208,11 +1208,13 @@ find_clip_box_for_y(const BoxRec *begin, const BoxRec *end, int16_t y) /* Quick test if scanline is within range of clip boxes */ if (begin->y2 > y) { - assert(__find_clip_box_for_y(begin, end, y) == begin); + assert(end == begin + 1 || + __find_clip_box_for_y(begin, end, y) == begin); return begin; } if (y >= end[-1].y2) { - assert(__find_clip_box_for_y(begin, end, y) == end); + assert(end == begin + 1 || + __find_clip_box_for_y(begin, end, y) == end); return end; } diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index 29bf6c4d..467d95f9 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -7165,14 +7165,14 @@ sna_copy_area(DrawablePtr src, DrawablePtr dst, GCPtr gc, const BoxRec * __find_clip_box_for_y(const BoxRec *begin, const BoxRec *end, int16_t y) { - assert(begin != end); - while (end > begin + 1) { + assert(end - begin > 1); + do { const BoxRec *mid = begin + (end - begin) / 2; if (mid->y2 > y) end = mid; else begin = mid; - } + } while (end > begin + 1); if (begin->y2 > y) return begin; else