From 42835696d19cbdb729f9430e46c2b0332a58d84a Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Sat, 24 Mar 2018 22:41:17 +0300 Subject: [PATCH] backfort fix for bug #3739: handle %lu, %li and %ld in SDL_SetError. --- src/SDL_error.c | 26 ++++++++++++++++++++++++++ src/SDL_error_c.h | 1 + 2 files changed, 27 insertions(+) diff --git a/src/SDL_error.c b/src/SDL_error.c index 82fd69f7e..cab7b0309 100644 --- a/src/SDL_error.c +++ b/src/SDL_error.c @@ -68,6 +68,17 @@ void SDL_SetError (const char *fmt, ...) case 0: /* Malformed format string.. */ --fmt; break; + case 'l': + switch (*fmt++) { + case 0: /* Malformed format string.. */ + --fmt; + break; + case 'i': case 'd': case 'u': + error->args[error->argc++].value_l = + va_arg(ap, long); + break; + } + break; case 'c': case 'i': case 'd': @@ -139,6 +150,21 @@ char *SDL_GetErrorMsg(char *errstr, int maxlen) while ( (*fmt == '.' || (*fmt >= '0' && *fmt <= '9')) && spot < (tmp+SDL_arraysize(tmp)-2) ) { *spot++ = *fmt++; } + if (*fmt == 'l') { + *spot++ = *fmt++; + *spot++ = *fmt++; + *spot++ = '\0'; + switch (spot[-2]) { + case 'i': case 'd': case 'u': + len = SDL_snprintf(msg, maxlen, tmp, error->args[argi++].value_l); + if (len > 0) { + msg += len; + maxlen -= len; + } + break; + } + continue; + } *spot++ = *fmt++; *spot++ = '\0'; switch (spot[-2]) { diff --git a/src/SDL_error_c.h b/src/SDL_error_c.h index 8e54e4254..bf8a52a3e 100644 --- a/src/SDL_error_c.h +++ b/src/SDL_error_c.h @@ -50,6 +50,7 @@ typedef struct SDL_error { unsigned char value_c; #endif int value_i; + long value_l; double value_f; char buf[ERR_MAX_STRLEN]; } args[ERR_MAX_ARGS];