From f4bd17deeeca6957d92979cf07fa436c249a9eda Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 6 Jul 2023 08:04:20 -0700 Subject: [PATCH] Fixed %p formatting when there is following text --- src/stdlib/SDL_string.c | 4 +--- test/testautomation_stdlib.c | 6 ++++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/stdlib/SDL_string.c b/src/stdlib/SDL_string.c index 95f407dfd..2af043f2e 100644 --- a/src/stdlib/SDL_string.c +++ b/src/stdlib/SDL_string.c @@ -1922,6 +1922,7 @@ int SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *f case 'p': info.force_case = SDL_CASE_LOWER; length += SDL_PrintPointer(TEXT_AND_LEN_ARGS, &info, va_arg(ap, void *)); + done = SDL_TRUE; break; case 'x': info.force_case = SDL_CASE_LOWER; @@ -1933,9 +1934,6 @@ int SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *f if (info.radix == 10) { info.radix = 16; } - if (*fmt == 'p') { - inttype = DO_LONG; - } SDL_FALLTHROUGH; case 'o': if (info.radix == 10) { diff --git a/test/testautomation_stdlib.c b/test/testautomation_stdlib.c index 4693101ac..27f6fa7e1 100644 --- a/test/testautomation_stdlib.c +++ b/test/testautomation_stdlib.c @@ -220,6 +220,12 @@ static int stdlib_snprintf(void *arg) SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); SDLTest_AssertCheck(result == SDL_strlen(expected), "Check result value, expected: %d, got: %d", (int)SDL_strlen(expected), result); + result = SDL_snprintf(text, sizeof(text), "A %p B", (void *)0x1234abcd); + expected = "A 0x1234abcd B"; + SDLTest_AssertPass("Call to SDL_snprintf(text, sizeof(text), \"A %%p B\", 0x1234abcd)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(expected), "Check result value, expected: %d, got: %d", (int)SDL_strlen(expected), result); + return TEST_COMPLETED; }