Skip to content

Commit 89d7d40

Browse files
committed
Added tests to cover invalid surface blits
Reproduction case for #12844
1 parent fe849f1 commit 89d7d40

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

test/testautomation_surface.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -959,6 +959,36 @@ static int SDLCALL surface_testBlitBlendMul(void *arg)
959959
return TEST_COMPLETED;
960960
}
961961

962+
/**
963+
* Tests blitting invalid surfaces.
964+
*/
965+
static int SDLCALL surface_testBlitInvalid(void *arg)
966+
{
967+
SDL_Surface *valid, *invalid;
968+
bool result;
969+
970+
valid = SDL_CreateSurface(1, 1, SDL_PIXELFORMAT_RGBA8888);
971+
SDLTest_AssertCheck(valid != NULL, "Check surface creation");
972+
invalid = SDL_CreateSurface(0, 0, SDL_PIXELFORMAT_RGBA8888);
973+
SDLTest_AssertCheck(invalid != NULL, "Check surface creation");
974+
SDLTest_AssertCheck(invalid->pixels == NULL, "Check surface pixels are NULL");
975+
976+
result = SDL_BlitSurface(invalid, NULL, valid, NULL);
977+
SDLTest_AssertCheck(result == true, "SDL_BlitSurface(invalid, NULL, valid, NULL), result = %s\n", result ? "true" : "false");
978+
result = SDL_BlitSurface(valid, NULL, invalid, NULL);
979+
SDLTest_AssertCheck(result == true, "SDL_BlitSurface(valid, NULL, invalid, NULL), result = %s\n", result ? "true" : "false");
980+
981+
result = SDL_BlitSurfaceScaled(invalid, NULL, valid, NULL, SDL_SCALEMODE_NEAREST);
982+
SDLTest_AssertCheck(result == false, "SDL_BlitSurfaceScaled(invalid, NULL, valid, NULL, SDL_SCALEMODE_NEAREST), result = %s\n", result ? "true" : "false");
983+
result = SDL_BlitSurfaceScaled(valid, NULL, invalid, NULL, SDL_SCALEMODE_NEAREST);
984+
SDLTest_AssertCheck(result == false, "SDL_BlitSurfaceScaled(valid, NULL, invalid, NULL, SDL_SCALEMODE_NEAREST), result = %s\n", result ? "true" : "false");
985+
986+
SDL_DestroySurface(valid);
987+
SDL_DestroySurface(invalid);
988+
989+
return TEST_COMPLETED;
990+
}
991+
962992
static int SDLCALL surface_testOverflow(void *arg)
963993
{
964994
char buf[1024];
@@ -1632,6 +1662,10 @@ static const SDLTest_TestCaseReference surfaceTestBlitBlendMul = {
16321662
surface_testBlitBlendMul, "surface_testBlitBlendMul", "Tests blitting routines with mul blending mode.", TEST_ENABLED
16331663
};
16341664

1665+
static const SDLTest_TestCaseReference surfaceTestBlitInvalid = {
1666+
surface_testBlitInvalid, "surface_testBlitInvalid", "Tests blitting routines with invalid surfaces.", TEST_ENABLED
1667+
};
1668+
16351669
static const SDLTest_TestCaseReference surfaceTestOverflow = {
16361670
surface_testOverflow, "surface_testOverflow", "Test overflow detection.", TEST_ENABLED
16371671
};
@@ -1680,6 +1714,7 @@ static const SDLTest_TestCaseReference *surfaceTests[] = {
16801714
&surfaceTestBlitBlendAddPremultiplied,
16811715
&surfaceTestBlitBlendMod,
16821716
&surfaceTestBlitBlendMul,
1717+
&surfaceTestBlitInvalid,
16831718
&surfaceTestOverflow,
16841719
&surfaceTestFlip,
16851720
&surfaceTestPalette,

0 commit comments

Comments
 (0)