From c36d8c9271ce3f5f9f0d9d4214a1f7461709dcaf Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 1 Jun 2025 12:48:26 +0300 Subject: [PATCH] [WIN32K] Fix a possible NULL pointer dereference in co_IntGetScrollBarInfo The following code in user32_winetest scroll.c was causing it: ret = EnableScrollBar( mainwnd, SB_CTL, ESB_ENABLE_BOTH ); ok( !ret, "EnableScrollBar should fail.\n" ); --- win32ss/user/ntuser/scrollbar.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/win32ss/user/ntuser/scrollbar.c b/win32ss/user/ntuser/scrollbar.c index ee737d5b6f1..5e39fe4ad7e 100644 --- a/win32ss/user/ntuser/scrollbar.c +++ b/win32ss/user/ntuser/scrollbar.c @@ -495,6 +495,11 @@ co_IntSetScrollInfo(PWND Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bRedraw) psbi = IntGetScrollbarInfoFromWindow(Window, nBar); Info = IntGetScrollInfoFromWindow(Window, nBar); pSBData = IntGetSBData(Window, nBar); + if (pSBData == NULL) + { + ERR("co_IntSetScrollInfo: No SBDATA for window %p, bar %d\n", UserHMGetHandle(Window), nBar); + return FALSE; + } if (lpsi->fMask & SIF_THEMED && !(Info->fMask & SIF_THEMED)) Info->fMask |= SIF_THEMED; @@ -687,6 +692,11 @@ co_IntGetScrollBarInfo(PWND Window, LONG idObject, PSCROLLBARINFO psbi) sbi = IntGetScrollbarInfoFromWindow(Window, Bar); pSBData = IntGetSBData(Window, Bar); + if (pSBData == NULL) + { + ERR("co_IntGetScrollBarInfo: No scrollbar info for window %p, bar %d\n", UserHMGetHandle(Window), Bar); + return FALSE; + } IntGetScrollBarRect(Window, Bar, &(sbi->rcScrollBar)); IntCalculateThumb(Window, Bar, sbi, pSBData); @@ -787,6 +797,7 @@ co_IntCreateScrollBars(PWND Window) psbi->rgstate[i] = 0; pSBData = IntGetSBData(Window, s); + ASSERT(pSBData != NULL); IntGetScrollBarRect(Window, s, &(psbi->rcScrollBar)); IntCalculateThumb(Window, s, psbi, pSBData);