Quellcode durchsuchen

X11 Segmentation fault with multiple windows and renderers (see #5256)

Sylvain vor 3 Jahren
Ursprung
Commit
85e6500065
1 geänderte Dateien mit 14 neuen und 2 gelöschten Zeilen
  1. 14 2
      src/video/x11/SDL_x11window.c

+ 14 - 2
src/video/x11/SDL_x11window.c

@@ -1659,9 +1659,15 @@ void
 X11_SetWindowMouseGrab(_THIS, SDL_Window * window, SDL_bool grabbed)
 X11_SetWindowMouseGrab(_THIS, SDL_Window * window, SDL_bool grabbed)
 {
 {
     SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
     SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
-    Display *display = data->videodata->display;
+    Display *display;
     SDL_bool oldstyle_fullscreen;
     SDL_bool oldstyle_fullscreen;
 
 
+    if (data == NULL) {
+        return;
+    }
+
+    display = data->videodata->display;
+
     /* ICCCM2.0-compliant window managers can handle fullscreen windows
     /* ICCCM2.0-compliant window managers can handle fullscreen windows
        If we're using XVidMode to change resolution we need to confine
        If we're using XVidMode to change resolution we need to confine
        the cursor so we don't pan around the virtual desktop.
        the cursor so we don't pan around the virtual desktop.
@@ -1719,7 +1725,13 @@ void
 X11_SetWindowKeyboardGrab(_THIS, SDL_Window * window, SDL_bool grabbed)
 X11_SetWindowKeyboardGrab(_THIS, SDL_Window * window, SDL_bool grabbed)
 {
 {
     SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
     SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
-    Display *display = data->videodata->display;
+    Display *display;
+
+    if (data == NULL) {
+        return;
+    }
+
+    display = data->videodata->display;
 
 
     if (grabbed) {
     if (grabbed) {
         /* If the window is unmapped, XGrab calls return GrabNotViewable,
         /* If the window is unmapped, XGrab calls return GrabNotViewable,