From e88edac60067d8422c6d3e8e78026e9ccfcf3408 Mon Sep 17 00:00:00 2001
From: Lionel Ulmer <lionel.ulmer@free.fr>
Date: Tue, 26 Feb 2002 00:36:21 +0000
Subject: [PATCH] Fix crash in the X11 HAL when setting a NULL palette to a
 surface.

---
 dlls/ddraw/dsurface/hal.c | 2 +-
 dlls/x11drv/x11ddraw.c    | 8 +++++---
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/dlls/ddraw/dsurface/hal.c b/dlls/ddraw/dsurface/hal.c
index ca6d3640f4e..9948a8452a7 100644
--- a/dlls/ddraw/dsurface/hal.c
+++ b/dlls/ddraw/dsurface/hal.c
@@ -223,7 +223,7 @@ void HAL_DirectDrawSurface_set_palette(IDirectDrawSurfaceImpl* This,
     DIB_DirectDrawSurface_set_palette(This, pal);
     data.lpDD = dd_gbl;
     data.lpDDSurface = &This->local;
-    data.lpDDPalette = &pal->global;
+    data.lpDDPalette = (pal != NULL ? &pal->global : NULL);
     data.ddRVal = 0;
     data.Attach = TRUE; /* what's this? */
     data.SetPalette = dd_gbl->lpDDCBtmp->HALDDSurface.SetPalette;
diff --git a/dlls/x11drv/x11ddraw.c b/dlls/x11drv/x11ddraw.c
index 5175f164e54..901485b1366 100644
--- a/dlls/x11drv/x11ddraw.c
+++ b/dlls/x11drv/x11ddraw.c
@@ -159,12 +159,14 @@ static DWORD PASCAL X11DRV_DDHAL_DestroySurface(LPDDHAL_DESTROYSURFACEDATA data)
 
 static DWORD PASCAL X11DRV_DDHAL_SetPalette(LPDDHAL_SETPALETTEDATA data)
 {
-  Colormap pal = data->lpDDPalette->u1.dwReserved1;
-  if (pal) {
+  if (data->lpDDPalette && data->lpDDPalette->u1.dwReserved1) {
     if (data->lpDDSurface == X11DRV_DD_Primary) {
       FIXME("stub\n");
       /* we should probably find the ddraw window (maybe data->lpDD->lpExclusiveOwner->hWnd),
-       * and attach the palette to it */
+       * and attach the palette to it
+       *
+       * Colormap pal = data->lpDDPalette->u1.dwReserved1;
+       */
     }
   }
   data->ddRVal = DD_OK;
-- 
GitLab