SDL: Fixed bug #5256: X11 Segmentation fault with multiple windows and renderers

From 8c660ccb6f20a34e5a9b758cd2f2f6d41d7259df Mon Sep 17 00:00:00 2001
From: Sylvain <[EMAIL REDACTED]>
Date: Tue, 25 Jan 2022 17:14:01 +0100
Subject: [PATCH] Fixed bug #5256: X11 Segmentation fault with multiple windows
 and renderers First window is created and it triggers and 'EnterNotify' event
 which calls SDL_SetMouseFocus() and X11_ShowCursor() while the second windows
 hasn't finished to be created  (eg window->driverdata isn't set) Just check
 for a valid 'driverdata'

---
 src/video/x11/SDL_x11mouse.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/video/x11/SDL_x11mouse.c b/src/video/x11/SDL_x11mouse.c
index 033df8d28c3..9eb1ddd3075 100644
--- a/src/video/x11/SDL_x11mouse.c
+++ b/src/video/x11/SDL_x11mouse.c
@@ -294,14 +294,15 @@ X11_ShowCursor(SDL_Cursor * cursor)
         SDL_VideoDevice *video = SDL_GetVideoDevice();
         Display *display = GetDisplay();
         SDL_Window *window;
-        SDL_WindowData *data;
 
         for (window = video->windows; window; window = window->next) {
-            data = (SDL_WindowData *)window->driverdata;
-            if (x11_cursor != None) {
-                X11_XDefineCursor(display, data->xwindow, x11_cursor);
-            } else {
-                X11_XUndefineCursor(display, data->xwindow);
+            SDL_WindowData *data = (SDL_WindowData *)window->driverdata;
+            if (data) {
+                if (x11_cursor != None) {
+                    X11_XDefineCursor(display, data->xwindow, x11_cursor);
+                } else {
+                    X11_XUndefineCursor(display, data->xwindow);
+                }
             }
         }
         X11_XFlush(display);