surface: Make sure SDL_ConvertSurface() deals with palettes (thanks, Sylvain!). Fixes Bugzilla #3826. Fixes Bugzilla #2979.
diff --git a/src/video/SDL_pixels.c b/src/video/SDL_pixels.c
index 13cd75a..649303c 100644
--- a/src/video/SDL_pixels.c
+++ b/src/video/SDL_pixels.c
@@ -658,7 +658,7 @@ SDL_SetPixelFormatPalette(SDL_PixelFormat * format, SDL_Palette *palette)
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 --git a/src/video/SDL_surface.c b/src/video/SDL_surface.c
index 678fdc2..600056f 100644
--- a/src/video/SDL_surface.c
+++ b/src/video/SDL_surface.c
@@ -998,6 +998,11 @@ SDL_ConvertSurface(SDL_Surface * surface, const SDL_PixelFormat * format,
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;