Added additional input validation to SDL_AllocPalette; added error codes; added test case to Pixels suite for coverage
This commit is contained in:
parent
866f2e5f9e
commit
28d45cd955
2 changed files with 96 additions and 2 deletions
|
@ -503,6 +503,7 @@ SDL_AllocFormat(Uint32 pixel_format)
|
||||||
}
|
}
|
||||||
if (SDL_InitFormat(format, pixel_format) < 0) {
|
if (SDL_InitFormat(format, pixel_format) < 0) {
|
||||||
SDL_free(format);
|
SDL_free(format);
|
||||||
|
SDL_InvalidParamError("format");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -585,6 +586,7 @@ SDL_FreeFormat(SDL_PixelFormat *format)
|
||||||
SDL_PixelFormat *prev;
|
SDL_PixelFormat *prev;
|
||||||
|
|
||||||
if (!format) {
|
if (!format) {
|
||||||
|
SDL_InvalidParamError("format");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (--format->refcount > 0) {
|
if (--format->refcount > 0) {
|
||||||
|
@ -614,6 +616,12 @@ SDL_AllocPalette(int ncolors)
|
||||||
{
|
{
|
||||||
SDL_Palette *palette;
|
SDL_Palette *palette;
|
||||||
|
|
||||||
|
/* Input validation */
|
||||||
|
if (ncolors < 1) {
|
||||||
|
SDL_InvalidParamError("ncolors");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
palette = (SDL_Palette *) SDL_malloc(sizeof(*palette));
|
palette = (SDL_Palette *) SDL_malloc(sizeof(*palette));
|
||||||
if (!palette) {
|
if (!palette) {
|
||||||
SDL_OutOfMemory();
|
SDL_OutOfMemory();
|
||||||
|
@ -693,6 +701,7 @@ void
|
||||||
SDL_FreePalette(SDL_Palette * palette)
|
SDL_FreePalette(SDL_Palette * palette)
|
||||||
{
|
{
|
||||||
if (!palette) {
|
if (!palette) {
|
||||||
|
SDL_InvalidParamError("palette");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (--palette->refcount > 0) {
|
if (--palette->refcount > 0) {
|
||||||
|
|
|
@ -101,6 +101,9 @@ char* _nonRGBPixelFormatsVerbose[] =
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Call to SDL_AllocFormat and SDL_FreeFormat
|
* @brief Call to SDL_AllocFormat and SDL_FreeFormat
|
||||||
|
*
|
||||||
|
* @sa http://wiki.libsdl.org/moin.fcg/SDL_AllocFormat
|
||||||
|
* @sa http://wiki.libsdl.org/moin.fcg/SDL_FreeFormat
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
pixels_allocFreeFormat(void *arg)
|
pixels_allocFreeFormat(void *arg)
|
||||||
|
@ -145,18 +148,100 @@ pixels_allocFreeFormat(void *arg)
|
||||||
SDLTest_AssertCheck(result == NULL, "Verify result is NULL");
|
SDLTest_AssertCheck(result == NULL, "Verify result is NULL");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Negative cases */
|
||||||
|
format = 0xffffffff;
|
||||||
|
result = SDL_AllocFormat(format);
|
||||||
|
SDLTest_AssertPass("Call to SDL_AllocFormat(0xffffffff)");
|
||||||
|
SDLTest_AssertCheck(result == NULL, "Verify result is NULL");
|
||||||
|
/* TODO: check error code */
|
||||||
|
|
||||||
|
SDL_FreeFormat(NULL);
|
||||||
|
SDLTest_AssertPass("Call to SDL_FreeFormat(NULL)");
|
||||||
|
/* TODO: check error code */
|
||||||
|
|
||||||
|
return TEST_COMPLETED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Call to SDL_AllocPalette and SDL_FreePalette
|
||||||
|
*
|
||||||
|
* @sa http://wiki.libsdl.org/moin.fcg/SDL_AllocPalette
|
||||||
|
* @sa http://wiki.libsdl.org/moin.fcg/SDL_FreePalette
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
pixels_allocFreePalette(void *arg)
|
||||||
|
{
|
||||||
|
int variation;
|
||||||
|
int i;
|
||||||
|
int ncolors;
|
||||||
|
SDL_Palette* result;
|
||||||
|
|
||||||
|
/* Allocate palette */
|
||||||
|
for (variation = 1; variation <= 3; variation++) {
|
||||||
|
switch (variation) {
|
||||||
|
/* Just one color */
|
||||||
|
case 1:
|
||||||
|
ncolors = 1;
|
||||||
|
break;
|
||||||
|
/* Two colors */
|
||||||
|
case 2:
|
||||||
|
ncolors = 2;
|
||||||
|
break;
|
||||||
|
/* More than two colors */
|
||||||
|
case 3:
|
||||||
|
ncolors = SDLTest_RandomIntegerInRange(8, 16);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = SDL_AllocPalette(ncolors);
|
||||||
|
SDLTest_AssertPass("Call to SDL_AllocPalette(%d)", ncolors);
|
||||||
|
SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
|
||||||
|
if (result != NULL) {
|
||||||
|
SDLTest_AssertCheck(result->ncolors == ncolors, "Verify value of result.ncolors; expected: %u, got %u", ncolors, result->ncolors);
|
||||||
|
if (result->ncolors > 0) {
|
||||||
|
SDLTest_AssertCheck(result->colors != NULL, "Verify value of result.colors is not NULL");
|
||||||
|
if (result->colors != NULL) {
|
||||||
|
for(i = 0; i < result->ncolors; i++) {
|
||||||
|
SDLTest_AssertCheck(result->colors[i].r == 255, "Verify value of result.colors[%d].r; expected: 255, got %u", i, result->colors[i].r);
|
||||||
|
SDLTest_AssertCheck(result->colors[i].g == 255, "Verify value of result.colors[%d].g; expected: 255, got %u", i, result->colors[i].g);
|
||||||
|
SDLTest_AssertCheck(result->colors[i].b == 255, "Verify value of result.colors[%d].b; expected: 255, got %u", i, result->colors[i].b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Deallocate again */
|
||||||
|
SDL_FreePalette(result);
|
||||||
|
SDLTest_AssertPass("Call to SDL_FreePalette()");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Negative cases */
|
||||||
|
for (ncolors = 0; ncolors > -3; ncolors--) {
|
||||||
|
result = SDL_AllocPalette(ncolors);
|
||||||
|
SDLTest_AssertPass("Call to SDL_AllocPalette(%d)", ncolors);
|
||||||
|
SDLTest_AssertCheck(result == NULL, "Verify result is NULL");
|
||||||
|
/* TODO: check error code */
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_FreePalette(NULL);
|
||||||
|
SDLTest_AssertPass("Call to SDL_FreePalette(NULL)");
|
||||||
|
/* TODO: check error code */
|
||||||
|
|
||||||
return TEST_COMPLETED;
|
return TEST_COMPLETED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ================= Test References ================== */
|
/* ================= Test References ================== */
|
||||||
|
|
||||||
/* SysWM test cases */
|
/* Pixels test cases */
|
||||||
static const SDLTest_TestCaseReference pixelsTest1 =
|
static const SDLTest_TestCaseReference pixelsTest1 =
|
||||||
{ (SDLTest_TestCaseFp)pixels_allocFreeFormat, "pixels_allocFreeFormat", "Call to SDL_AllocFormat and SDL_FreeFormat", TEST_ENABLED };
|
{ (SDLTest_TestCaseFp)pixels_allocFreeFormat, "pixels_allocFreeFormat", "Call to SDL_AllocFormat and SDL_FreeFormat", TEST_ENABLED };
|
||||||
|
|
||||||
|
static const SDLTest_TestCaseReference pixelsTest2 =
|
||||||
|
{ (SDLTest_TestCaseFp)pixels_allocFreePalette, "pixels_allocFreePalette", "Call to SDL_AllocPalette and SDL_FreePalette", TEST_ENABLED };
|
||||||
|
|
||||||
/* Sequence of Pixels test cases */
|
/* Sequence of Pixels test cases */
|
||||||
static const SDLTest_TestCaseReference *pixelsTests[] = {
|
static const SDLTest_TestCaseReference *pixelsTests[] = {
|
||||||
&pixelsTest1, NULL
|
&pixelsTest1, &pixelsTest2, NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Pixels test suite (global) */
|
/* Pixels test suite (global) */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue