diff --git a/src/video/SDL_surface.c b/src/video/SDL_surface.c index 62dc5f04a0..173bcbbb8e 100644 --- a/src/video/SDL_surface.c +++ b/src/video/SDL_surface.c @@ -204,6 +204,11 @@ SDL_Surface *SDL_CreateSurface(int width, int height, SDL_PixelFormat format) return NULL; } + if (format == SDL_PIXELFORMAT_UNKNOWN) { + SDL_InvalidParamError("format"); + return NULL; + } + if (!SDL_CalculateSurfaceSize(format, width, height, &size, &pitch, false /* not minimal pitch */)) { // Overflow... return NULL; @@ -250,6 +255,11 @@ SDL_Surface *SDL_CreateSurfaceFrom(int width, int height, SDL_PixelFormat format return NULL; } + if (format == SDL_PIXELFORMAT_UNKNOWN) { + SDL_InvalidParamError("format"); + return NULL; + } + if (pitch == 0 && !pixels) { // The application will fill these in later with valid values } else { diff --git a/test/testautomation_surface.c b/test/testautomation_surface.c index c1d641eef6..29531b02b1 100644 --- a/test/testautomation_surface.c +++ b/test/testautomation_surface.c @@ -313,6 +313,24 @@ static void AssertFileExist(const char *filename) /* Test case functions */ +/** + * Tests creating surface with invalid format + */ +static int SDLCALL surface_testInvalidFormat(void *arg) +{ + SDL_Surface *surface; + + surface = SDL_CreateSurface(32, 32, SDL_PIXELFORMAT_UNKNOWN); + SDLTest_AssertCheck(surface == NULL, "Verify SDL_CreateSurface(SDL_PIXELFORMAT_UNKNOWN) returned NULL"); + SDL_DestroySurface(surface); + + surface = SDL_CreateSurfaceFrom(32, 32, SDL_PIXELFORMAT_UNKNOWN, NULL, 0); + SDLTest_AssertCheck(surface == NULL, "Verify SDL_CreateSurfaceFrom(SDL_PIXELFORMAT_UNKNOWN) returned NULL"); + SDL_DestroySurface(surface); + + return TEST_COMPLETED; +} + /** * Tests sprite saving and loading */ @@ -1540,6 +1558,10 @@ static int SDLCALL surface_testScale(void *arg) /* ================= Test References ================== */ /* Surface test cases */ +static const SDLTest_TestCaseReference surfaceTestInvalidFormat = { + surface_testInvalidFormat, "surface_testInvalidFormat", "Tests creating surface with invalid format", TEST_ENABLED +}; + static const SDLTest_TestCaseReference surfaceTestSaveLoadBitmap = { surface_testSaveLoadBitmap, "surface_testSaveLoadBitmap", "Tests sprite saving and loading.", TEST_ENABLED }; @@ -1638,6 +1660,7 @@ static const SDLTest_TestCaseReference surfaceTestScale = { /* Sequence of Surface test cases */ static const SDLTest_TestCaseReference *surfaceTests[] = { + &surfaceTestInvalidFormat, &surfaceTestSaveLoadBitmap, &surfaceTestBlitZeroSource, &surfaceTestBlit,