From 14af8701df46fb8f40a862ea5eff41e6ae1c2868 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 1 Feb 2020 18:19:57 +0000 Subject: Fix #6566: Fix signed integer overflow in viewport draw area chunking This caused drawing areas larger than 2097151 pixels at 8x zoom to not be subdivided into smaller chunks as required. This resulted in pathological performance issues in the sprite sorter. --- src/viewport.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index 06f502379..1c9dca1ef 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1728,7 +1728,7 @@ void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom */ static void ViewportDrawChk(const ViewPort *vp, int left, int top, int right, int bottom) { - if (ScaleByZoom(bottom - top, vp->zoom) * ScaleByZoom(right - left, vp->zoom) > (int)(180000 * ZOOM_LVL_BASE * ZOOM_LVL_BASE)) { + if ((int64)ScaleByZoom(bottom - top, vp->zoom) * (int64)ScaleByZoom(right - left, vp->zoom) > (int64)(180000 * ZOOM_LVL_BASE * ZOOM_LVL_BASE)) { if ((bottom - top) > (right - left)) { int t = (top + bottom) >> 1; ViewportDrawChk(vp, left, top, right, t); -- cgit v1.2.3-54-g00ecf