Skip to content
Permalink
Browse files

make sure SDL_vsnprintf() nul terminates if it is using _vsnprintf

The change makes sure that SDL_vsnprintf() nul terminates if it is
using _vsnprintf() for the job.

I made this patch for Watcom, whose _vsnprintf() doesn't guarantee
nul termination.  The preprocessor check can be extended to windows
in general too, if required.

Closes bug #3769.
  • Loading branch information
sezero committed May 10, 2018
1 parent c11ae93 commit 652d59fb3bcd761e548db4027a77e651cafbe59a
Showing with 12 additions and 1 deletion.
  1. +12 −1 src/stdlib/SDL_string.c
@@ -1319,7 +1319,18 @@ SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_
return retval;
}

#ifdef HAVE_VSNPRINTF
#if defined(HAVE_LIBC) && defined(__WATCOMC__)
/* _vsnprintf() doesn't ensure nul termination */
int SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap)
{
int retval;
if (!fmt) fmt = "";
retval = _vsnprintf(text, maxlen, fmt, ap);
if (maxlen > 0) text[maxlen-1] = '\0';
if (retval < 0) retval = (int) maxlen;
return retval;
}
#elif defined(HAVE_VSNPRINTF)
int SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap)
{
if (!fmt) {

0 comments on commit 652d59f

Please sign in to comment.