Don't allocate in SDLTest_GenerateRunSeed

This commit is contained in:
Anonymous Maarten
2024-06-21 21:01:35 +02:00
committed by Anonymous Maarten
parent 2f4b2df595
commit 872608b8af
3 changed files with 27 additions and 39 deletions

View File

@@ -101,15 +101,15 @@ typedef struct SDLTest_TestSuiteReference {
/* /*
* Generates a random run seed string for the harness. The generated seed will contain alphanumeric characters (0-9A-Z). * Generates a random run seed string for the harness. The generated seed
* will contain alphanumeric characters (0-9A-Z).
* *
* Note: The returned string needs to be deallocated by the caller. * \param buffer Buffer in which to generate the random seed. Must have a capacity of at least length + 1 characters.
* \param length Number of alphanumeric characters to write to buffer, must be >0
* *
* \param length The length of the seed string to generate * \returns A null-terminated seed string and equal to the in put buffer on success, NULL on failure
*
* \returns the generated seed string
*/ */
char *SDLTest_GenerateRunSeed(const int length); char *SDLTest_GenerateRunSeed(char *buffer, int length);
/* /*
* Execute a test suite using the given run seed and execution key. * Execute a test suite using the given run seed and execution key.

View File

@@ -50,35 +50,22 @@
/* ! Timeout for single test case execution */ /* ! Timeout for single test case execution */
static Uint32 SDLTest_TestCaseTimeout = 3600; static Uint32 SDLTest_TestCaseTimeout = 3600;
/** char *SDLTest_GenerateRunSeed(char *buffer, int length)
* Generates a random run seed string for the harness. The generated seed
* will contain alphanumeric characters (0-9A-Z).
*
* Note: The returned string needs to be deallocated by the caller.
*
* \param length The length of the seed string to generate
*
* \returns The generated seed string
*/
char *SDLTest_GenerateRunSeed(const int length)
{ {
char *seed = NULL;
Uint64 randomContext = SDL_GetPerformanceCounter(); Uint64 randomContext = SDL_GetPerformanceCounter();
int counter; int counter;
if (!buffer) {
SDLTest_LogError("Input buffer must not be NULL.");
return NULL;
}
/* Sanity check input */ /* Sanity check input */
if (length <= 0) { if (length <= 0) {
SDLTest_LogError("The length of the harness seed must be >0."); SDLTest_LogError("The length of the harness seed must be >0.");
return NULL; return NULL;
} }
/* Allocate output buffer */
seed = (char *)SDL_malloc((length + 1) * sizeof(char));
if (!seed) {
SDLTest_LogError("SDL_malloc for run seed output buffer failed.");
return NULL;
}
/* Generate a random string of alphanumeric characters */ /* Generate a random string of alphanumeric characters */
for (counter = 0; counter < length; counter++) { for (counter = 0; counter < length; counter++) {
char ch; char ch;
@@ -88,11 +75,11 @@ char *SDLTest_GenerateRunSeed(const int length)
} else { } else {
ch = (char)('A' + v - 10); ch = (char)('A' + v - 10);
} }
seed[counter] = ch; buffer[counter] = ch;
} }
seed[length] = '\0'; buffer[length] = '\0';
return seed; return buffer;
} }
/** /**
@@ -417,14 +404,11 @@ int SDLTest_RunSuites(SDLTest_TestSuiteReference *testSuites[], const char *user
/* Generate run see if we don't have one already */ /* Generate run see if we don't have one already */
if (!userRunSeed || userRunSeed[0] == '\0') { if (!userRunSeed || userRunSeed[0] == '\0') {
char *tmp = SDLTest_GenerateRunSeed(16); runSeed = SDLTest_GenerateRunSeed(generatedSeed, 16);
if (!tmp) { if (!runSeed) {
SDLTest_LogError("Generating a random seed failed"); SDLTest_LogError("Generating a random seed failed");
return 2; return 2;
} }
SDL_memcpy(generatedSeed, tmp, 16 + 1);
SDL_free(tmp);
runSeed = generatedSeed;
} else { } else {
runSeed = userRunSeed; runSeed = userRunSeed;
} }

View File

@@ -16,26 +16,30 @@
*/ */
static int sdltest_generateRunSeed(void *arg) static int sdltest_generateRunSeed(void *arg)
{ {
char buffer[32];
char *result; char *result;
size_t i, l; size_t i, l;
int j; int j;
for (i = 1; i <= 10; i += 3) { for (i = 1; i <= 10; i += 3) {
result = SDLTest_GenerateRunSeed((int)i); result = SDLTest_GenerateRunSeed(buffer, (int)i);
SDLTest_AssertPass("Call to SDLTest_GenerateRunSeed()"); SDLTest_AssertPass("Call to SDLTest_GenerateRunSeed(<buf>, %" SDL_PRIu64 ")", (Uint64)i);
SDLTest_AssertCheck(result != NULL, "Verify returned value is not NULL"); SDLTest_AssertCheck(result != NULL, "Verify returned value is not NULL");
if (result != NULL) { if (result != NULL) {
l = SDL_strlen(result); l = SDL_strlen(result);
SDLTest_AssertCheck(l == i, "Verify length of returned value is %d, got: %d", (int)i, (int)l); SDLTest_AssertCheck(l == i, "Verify length of returned value is %d, got: %d", (int)i, (int)l);
SDL_free(result);
} }
} }
result = SDLTest_GenerateRunSeed(NULL, 10);
SDLTest_AssertPass("Call to SDLTest_GenerateRunSeed(NULL, 10)");
SDLTest_AssertCheck(result == NULL, "Verify returned value is NULL");
/* Negative cases */ /* Negative cases */
for (j = -2; j <= 0; j++) { for (j = -2; j <= 0; j++) {
result = SDLTest_GenerateRunSeed(j); result = SDLTest_GenerateRunSeed(buffer, j);
SDLTest_AssertPass("Call to SDLTest_GenerateRunSeed()"); SDLTest_AssertPass("Call to SDLTest_GenerateRunSeed(<buf>, %d)", j);
SDLTest_AssertCheck(result == NULL, "Verify returned value is not NULL"); SDLTest_AssertCheck(result == NULL, "Verify returned value is NULL");
} }
return TEST_COMPLETED; return TEST_COMPLETED;