diff -r d167d43d74f2 src/video/SDL_pixels.c --- a/src/video/SDL_pixels.c Mon Sep 11 18:20:56 2017 -0400 +++ b/src/video/SDL_pixels.c Thu Sep 14 09:22:39 2017 +0200 @@ -658,7 +658,7 @@ return SDL_SetError("SDL_SetPixelFormatPalette() passed NULL format"); } - if (palette && palette->ncolors != (1 << format->BitsPerPixel)) { + if (palette && palette->ncolors > (1 << format->BitsPerPixel)) { return SDL_SetError("SDL_SetPixelFormatPalette() passed a palette that doesn't match the format"); } diff -r d167d43d74f2 src/video/SDL_surface.c --- a/src/video/SDL_surface.c Mon Sep 11 18:20:56 2017 -0400 +++ b/src/video/SDL_surface.c Thu Sep 14 09:22:39 2017 +0200 @@ -998,6 +998,11 @@ surface->format->Gmask, surface->format->Bmask, surface->format->Amask); + /* Share the palette, if any */ + if (surface->format->palette) { + SDL_SetSurfacePalette(tmp, surface->format->palette); + } + SDL_FillRect(tmp, NULL, surface->map->info.colorkey); tmp->map->info.flags &= ~SDL_COPY_COLORKEY;