Browse Source

Fixed crash if GetRectDisplayIndex() is called before SDL_VideoInit()

(cherry picked from commit d87048fd5a7dff55c4cb205dd29e527c9cc51225)
Sam Lantinga 2 years ago
parent
commit
f8c3528c55
1 changed files with 18 additions and 16 deletions
  1. 18 16
      src/video/SDL_video.c

+ 18 - 16
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(&center, 1, &display_rect, NULL)) {
-            return i;
-        }
+            /* Check if the window is fully enclosed */
+            if (SDL_EnclosePoints(&center, 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;
+            }
         }
     }