SDL: Fixed crash if a display is enumerated twice

From 07578fde3dad2dadd605f5b18399c8d021f6ae5d Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Tue, 1 Aug 2023 18:28:55 -0700
Subject: [PATCH] Fixed crash if a display is enumerated twice

This can happen if a monitor is in the process of becoming primary because another monitor was disconnected.
---
 src/video/windows/SDL_windowsmodes.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/video/windows/SDL_windowsmodes.c b/src/video/windows/SDL_windowsmodes.c
index f6f8f105b54e..5868e9a5edf3 100644
--- a/src/video/windows/SDL_windowsmodes.c
+++ b/src/video/windows/SDL_windowsmodes.c
@@ -357,10 +357,19 @@ static void WIN_AddDisplay(SDL_VideoDevice *_this, HMONITOR hMonitor, const MONI
             SDL_bool moved = (index != i);
             SDL_bool changed_bounds = SDL_FALSE;
 
+            if (driverdata->state != DisplayRemoved) {
+                /* We've already enumerated this display, don't move it */
+                return;
+            }
+
+            if (index >= _this->num_displays) {
+                /* This should never happen due to the check above, but just in case... */
+                return;
+            }
+
             if (moved) {
                 SDL_VideoDisplay tmp;
 
-                SDL_assert(index < _this->num_displays);
                 SDL_memcpy(&tmp, &_this->displays[index], sizeof(tmp));
                 SDL_memcpy(&_this->displays[index], &_this->displays[i], sizeof(tmp));
                 SDL_memcpy(&_this->displays[i], &tmp, sizeof(tmp));