Index: generic/nsfError.c =================================================================== diff -u -r4f4484003442910068436109bae0336b285476a3 -r34e5bc1b7adfbdd47a74590045b8b1310373a760 --- generic/nsfError.c (.../nsfError.c) (revision 4f4484003442910068436109bae0336b285476a3) +++ generic/nsfError.c (.../nsfError.c) (revision 34e5bc1b7adfbdd47a74590045b8b1310373a760) @@ -148,13 +148,19 @@ va_copy(vargsCopy, vargs); result = vsnprintf(dsPtr->string + offset, avail, fmt, vargsCopy); + va_end(vargsCopy); + #if defined(_MSC_VER) - assert(result > -1); + failure = (result == -1); #else - assert(result > -1); /* no encoding error */ - assert(result < avail); /* no overflow */ + failure = (result == -1 || result >= avail); #endif - va_end(vargsCopy); + + assert(failure == 0); + + if (unlikely(failure != 0)) { + fprintf(stderr, "copying variable argument vector into dynamic string failed\n"); + } } }