From d87048fd5a7dff55c4cb205dd29e527c9cc51225 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 30 Nov 2022 14:37:34 -0800 Subject: [PATCH] Fixed crash if GetRectDisplayIndex() is called before SDL_VideoInit() --- src/video/SDL_video.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 658058f33..089b3e6a8 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1122,25 +1122,27 @@ static int GetRectDisplayIndex(int x, int y, int w, int h) center.x = x + w / 2; center.y = y + h / 2; - for (i = 0; i < _this->num_displays; ++i) { - SDL_Rect display_rect; - SDL_GetDisplayBounds(i, &display_rect); + if (_this) { + for (i = 0; i < _this->num_displays; ++i) { + SDL_Rect display_rect; + SDL_GetDisplayBounds(i, &display_rect); - /* Check if the window is fully enclosed */ - if (SDL_EnclosePoints(¢er, 1, &display_rect, NULL)) { - return i; - } + /* Check if the window is fully enclosed */ + if (SDL_EnclosePoints(¢er, 1, &display_rect, NULL)) { + return i; + } - /* Snap window center to the display rect */ - closest_point_on_display = center; - SDL_GetClosestPointOnRect(&display_rect, &closest_point_on_display); + /* Snap window center to the display rect */ + closest_point_on_display = center; + SDL_GetClosestPointOnRect(&display_rect, &closest_point_on_display); - delta.x = center.x - closest_point_on_display.x; - delta.y = center.y - closest_point_on_display.y; - dist = (delta.x * delta.x + delta.y * delta.y); - if (dist < closest_dist) { - closest = i; - closest_dist = dist; + delta.x = center.x - closest_point_on_display.x; + delta.y = center.y - closest_point_on_display.y; + dist = (delta.x * delta.x + delta.y * delta.y); + if (dist < closest_dist) { + closest = i; + closest_dist = dist; + } } }