diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c index 533a2fe52..e7006fb40 100644 --- a/src/render/SDL_render.c +++ b/src/render/SDL_render.c @@ -2755,6 +2755,18 @@ static int RenderLineBresenham(SDL_Renderer *renderer, int x1, int y1, int x2, i int retval; SDL_bool isstack; SDL_FPoint *points; + SDL_Rect clip_rect; + + /* the backend might clip this further to the clipping rect, but we + just want a basic safety against generating millions of points for + massive lines. */ + clip_rect.x = (int) renderer->viewport.x; + clip_rect.y = (int) renderer->viewport.y; + clip_rect.w = (int) renderer->viewport.w; + clip_rect.h = (int) renderer->viewport.h; + if (!SDL_IntersectRectAndLine(&clip_rect, &x1, &y1, &x2, &y2)) { + return 0; + } deltax = SDL_abs(x2 - x1); deltay = SDL_abs(y2 - y1);