From: Bernhard Übelacker <bernhardu@mailbox.org> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=59203 --- dlls/gdi32/tests/palette.c | 30 ++++++++++++++++++++++++++++++ dlls/win32u/palette.c | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/dlls/gdi32/tests/palette.c b/dlls/gdi32/tests/palette.c index aac16097fba..e5342eb9dff 100644 --- a/dlls/gdi32/tests/palette.c +++ b/dlls/gdi32/tests/palette.c @@ -327,10 +327,40 @@ static void test_system_palette_entries(void) check_system_palette_entries(ULongToHandle(0xdeadbeef)); } +static void test_resize_palette(void) +{ + char logpalettebuf[sizeof(LOGPALETTE) + sizeof(logpalettedata)]; + PLOGPALETTE logpalette = (PLOGPALETTE)logpalettebuf; + HPALETTE hpal; + PALETTEENTRY palette_entries[11]; + int ret; + + /* Initialize the logical palette with a few colours */ + logpalette->palVersion = 0x300; + logpalette->palNumEntries = 8; + memcpy( logpalette->palPalEntry, logpalettedata, sizeof(logpalettedata) ); + + hpal = CreatePalette( logpalette ); + ok(hpal != NULL, "CreatePalette failed.\n"); + ret = GetPaletteEntries(hpal, 0, 11, palette_entries); + ok(ret == 8, "GetPaletteEntries returned %d entries, expected 8\n", ret); + + ok(ResizePalette(hpal, 10), "ResizePalette failed.\n"); + ret = GetPaletteEntries(hpal, 0, 11, palette_entries); + ok(ret == 10, "GetPaletteEntries returned %d entries, expected 10\n", ret); + + ok(!ResizePalette(hpal, 0), "ResizePalette failed.\n"); + ret = GetPaletteEntries(hpal, 0, 11, palette_entries); + ok(ret == 10, "GetPaletteEntries returned %d entries, expected 10\n", ret); + + ok(DeleteObject(hpal), "DeleteObject failed.\n"); +} + START_TEST(palette) { test_DIB_PAL_COLORS(); test_palette_entries(); test_halftone_palette(); test_system_palette_entries(); + test_resize_palette(); } diff --git a/dlls/win32u/palette.c b/dlls/win32u/palette.c index 4809b954fdf..6db9aa7b35d 100644 --- a/dlls/win32u/palette.c +++ b/dlls/win32u/palette.c @@ -224,7 +224,7 @@ BOOL WINAPI NtGdiResizePalette( HPALETTE hPal, UINT count ) PALETTEOBJ * palPtr = GDI_GetObjPtr( hPal, NTGDI_OBJ_PAL ); PALETTEENTRY *entries; - if( !palPtr ) return FALSE; + if( !palPtr || count == 0 ) return FALSE; TRACE("hpal = %p, prev = %i, new = %i\n", hPal, palPtr->count, count ); if (!(entries = realloc( palPtr->entries, count * sizeof(*palPtr->entries) ))) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9851