Fix Bug 2021: Win32: Stack overflow due to recursive SDL_LogOutput on SDL_LogError without console; fix off-by-one error in SDLtest test suite
This commit is contained in:
parent
58eedbb27e
commit
7067bff470
2 changed files with 9 additions and 8 deletions
|
@ -317,6 +317,7 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
|
||||||
{
|
{
|
||||||
#if defined(__WIN32__)
|
#if defined(__WIN32__)
|
||||||
/* Way too many allocations here, urgh */
|
/* Way too many allocations here, urgh */
|
||||||
|
/* Note: One can't call SDL_SetError here, since that function itself logs. */
|
||||||
{
|
{
|
||||||
char *output;
|
char *output;
|
||||||
size_t length;
|
size_t length;
|
||||||
|
@ -331,16 +332,16 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
|
||||||
if (!attachResult) {
|
if (!attachResult) {
|
||||||
attachError = GetLastError();
|
attachError = GetLastError();
|
||||||
if (attachError == ERROR_INVALID_HANDLE) {
|
if (attachError == ERROR_INVALID_HANDLE) {
|
||||||
SDL_SetError("Parent process has no console");
|
OutputDebugString(TEXT("Parent process has no console"));
|
||||||
consoleAttached = -1;
|
consoleAttached = -1;
|
||||||
} else if (attachError == ERROR_GEN_FAILURE) {
|
} else if (attachError == ERROR_GEN_FAILURE) {
|
||||||
SDL_SetError("Could not attach to console of parent process");
|
OutputDebugString(TEXT("Could not attach to console of parent process"));
|
||||||
consoleAttached = -1;
|
consoleAttached = -1;
|
||||||
} else if (attachError == ERROR_ACCESS_DENIED) {
|
} else if (attachError == ERROR_ACCESS_DENIED) {
|
||||||
/* Already attached */
|
/* Already attached */
|
||||||
consoleAttached = 1;
|
consoleAttached = 1;
|
||||||
} else {
|
} else {
|
||||||
SDL_SetError("Error %d attaching console", attachError);
|
OutputDebugString(TEXT("Error attaching console"));
|
||||||
consoleAttached = -1;
|
consoleAttached = -1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -364,10 +365,10 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
|
||||||
/* Screen output to stderr, if console was attached. */
|
/* Screen output to stderr, if console was attached. */
|
||||||
if (consoleAttached == 1) {
|
if (consoleAttached == 1) {
|
||||||
if (!WriteConsole(stderrHandle, tstr, lstrlen(tstr), &charsWritten, NULL)) {
|
if (!WriteConsole(stderrHandle, tstr, lstrlen(tstr), &charsWritten, NULL)) {
|
||||||
SDL_SetError("Error %d calling WriteConsole", GetLastError());
|
OutputDebugString(TEXT("Error calling WriteConsole"));
|
||||||
}
|
}
|
||||||
if (charsWritten == ERROR_NOT_ENOUGH_MEMORY) {
|
if (charsWritten == ERROR_NOT_ENOUGH_MEMORY) {
|
||||||
SDL_SetError("Insufficient heap memory to write message of size %d", length);
|
OutputDebugString(TEXT("Insufficient heap memory to write message"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ sdltest_randomNumber(void *arg)
|
||||||
SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%llu], got: %lld", umax, result);
|
SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%llu], got: %lld", umax, result);
|
||||||
|
|
||||||
result = (Sint64)SDLTest_RandomSint8();
|
result = (Sint64)SDLTest_RandomSint8();
|
||||||
min = 1 - (1 << 7);
|
min = 0 - (1 << 7);
|
||||||
max = (1 << 7) - 1;
|
max = (1 << 7) - 1;
|
||||||
SDLTest_AssertPass("Call to SDLTest_RandomSint8");
|
SDLTest_AssertPass("Call to SDLTest_RandomSint8");
|
||||||
SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%lld,%lld], got: %lld", min, max, result);
|
SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%lld,%lld], got: %lld", min, max, result);
|
||||||
|
@ -74,7 +74,7 @@ sdltest_randomNumber(void *arg)
|
||||||
SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%llu], got: %lld", umax, result);
|
SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%llu], got: %lld", umax, result);
|
||||||
|
|
||||||
result = (Sint64)SDLTest_RandomSint16();
|
result = (Sint64)SDLTest_RandomSint16();
|
||||||
min = 1 - (1 << 15);
|
min = 0 - (1 << 15);
|
||||||
max = (1 << 15) - 1;
|
max = (1 << 15) - 1;
|
||||||
SDLTest_AssertPass("Call to SDLTest_RandomSint16");
|
SDLTest_AssertPass("Call to SDLTest_RandomSint16");
|
||||||
SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%lld,%lld], got: %lld", min, max, result);
|
SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%lld,%lld], got: %lld", min, max, result);
|
||||||
|
@ -85,7 +85,7 @@ sdltest_randomNumber(void *arg)
|
||||||
SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%llu], got: %lld", umax, result);
|
SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%llu], got: %lld", umax, result);
|
||||||
|
|
||||||
result = (Sint64)SDLTest_RandomSint32();
|
result = (Sint64)SDLTest_RandomSint32();
|
||||||
min = 1 - ((Sint64)1 << 31);
|
min = 0 - ((Sint64)1 << 31);
|
||||||
max = ((Sint64)1 << 31) - 1;
|
max = ((Sint64)1 << 31) - 1;
|
||||||
SDLTest_AssertPass("Call to SDLTest_RandomSint32");
|
SDLTest_AssertPass("Call to SDLTest_RandomSint32");
|
||||||
SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%lld,%lld], got: %lld", min, max, result);
|
SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%lld,%lld], got: %lld", min, max, result);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue