From f8c3528c55d4f35510e1c1f7b546424a7a0bb21c Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Wed, 30 Nov 2022 14:37:34 -0800
Subject: [PATCH] Fixed crash if GetRectDisplayIndex() is called before
SDL_VideoInit()
(cherry picked from commit d87048fd5a7dff55c4cb205dd29e527c9cc51225)
---
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 eff52aed55d1..0c90a2d1630d 100644
--- a/src/video/SDL_video.c
+++ b/src/video/SDL_video.c
@@ -1105,25 +1105,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;
+ }
}
}