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.
This commit is contained in:
Ozkan Sezer 2018-05-10 09:02:39 +03:00
parent c11ae93aed
commit 652d59fb3b

View file

@ -1319,7 +1319,18 @@ SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_
return retval; 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) int SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap)
{ {
if (!fmt) { if (!fmt) {