diff options
author | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2008-09-24 11:22:52 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2008-09-24 11:22:52 +0000 |
commit | 29d1e44dec29a3c029b47634b5474f49e0e6d43b (patch) | |
tree | 945c62a61f11dc88d43809c9e9f00ca48ab744ae /framebuffer | |
parent | 9b76a47bbe36bd302a188072de935d3dbbbcb614 (diff) | |
download | netsurf-29d1e44dec29a3c029b47634b5474f49e0e6d43b.tar.gz netsurf-29d1e44dec29a3c029b47634b5474f49e0e6d43b.tar.bz2 |
Fix line plotting and rectangle clipping segfault
svn path=/trunk/netsurf/; revision=5430
Diffstat (limited to 'framebuffer')
-rw-r--r-- | framebuffer/fb_16bpp_plotters.c | 3 | ||||
-rw-r--r-- | framebuffer/fb_32bpp_plotters.c | 3 | ||||
-rw-r--r-- | framebuffer/fb_plotters.c | 4 |
3 files changed, 6 insertions, 4 deletions
diff --git a/framebuffer/fb_16bpp_plotters.c b/framebuffer/fb_16bpp_plotters.c index 1faa66e61..78d7cc2aa 100644 --- a/framebuffer/fb_16bpp_plotters.c +++ b/framebuffer/fb_16bpp_plotters.c @@ -66,7 +66,8 @@ static bool fb_16bpp_line(int x0, int y0, int x1, int y1, int width, if (y0 == y1) { /* horizontal line special cased */ - fb_plotters_clip_rect_ctx(&x0, &y0, &x1, &y1); + if (!fb_plotters_clip_rect_ctx(&x0, &y0, &x1, &y1)) + return true; /* line outside clipping */ /*LOG(("horiz: %d, %d, %d, %d, %d, 0x%lx, %d, %d", x0,y0,x1,y1,width,c,dotted,dashed));*/ diff --git a/framebuffer/fb_32bpp_plotters.c b/framebuffer/fb_32bpp_plotters.c index 24315d13e..3805ff753 100644 --- a/framebuffer/fb_32bpp_plotters.c +++ b/framebuffer/fb_32bpp_plotters.c @@ -60,7 +60,8 @@ static bool fb_32bpp_line(int x0, int y0, int x1, int y1, int width, if (y0 == y1) { /* horizontal line special cased */ - fb_plotters_clip_rect_ctx(&x0, &y0, &x1, &y1); + if (!fb_plotters_clip_rect_ctx(&x0, &y0, &x1, &y1)) + return true; /* line outside clipping */ pvideo = fb_32bpp_get_xy_loc(x0, y0); diff --git a/framebuffer/fb_plotters.c b/framebuffer/fb_plotters.c index 6604eaef2..87a179425 100644 --- a/framebuffer/fb_plotters.c +++ b/framebuffer/fb_plotters.c @@ -61,8 +61,8 @@ bool fb_plotters_clip_rect(const bbox_t *clip, if (*y1 < *y0) SWAP(*y0, *y1); - region1 = REGION(*x0, *y0, clip->x0, clip->x1, clip->y0, clip->y1); - region2 = REGION(*x1, *y1, clip->x0, clip->x1, clip->y0, clip->y1); + region1 = REGION(*x0, *y0, clip->x0, clip->x1 - 1, clip->y0, clip->y1 - 1); + region2 = REGION(*x1, *y1, clip->x0, clip->x1 - 1, clip->y0, clip->y1 - 1); /* area lies entirely outside the clipping rectangle */ if ((region1 | region2) && (region1 & region2)) |