Use va_copy() in pure-windows version of tor_asprintf().

It's not okay to use the same varargs list twice, and apparently
some windows build environments produce code here that would leave
tor_asprintf() broken. Fix for bug 20560; bugfix on 0.2.2.11-alpha
when tor_asprintf() was introduced.
This commit is contained in:
Nick Mathewson 2016-11-08 18:44:06 -05:00
parent 74e84b7eb7
commit 286fa94064
2 changed files with 8 additions and 1 deletions

4
changes/bug20560 Normal file
View File

@ -0,0 +1,4 @@
o Minor bugfixes (portability):
- Run correctly when built on Windows build environments that require
_vcsprintf(). Fixes bug 20560; bugfix on 0.2.2.11-alpha.

View File

@ -532,7 +532,10 @@ tor_vasprintf(char **strp, const char *fmt, va_list args)
/* On Windows, _vsnprintf won't tell us the length of the string if it
* overflows, so we need to use _vcsprintf to tell how much to allocate */
int len, r;
len = _vscprintf(fmt, args);
va_list tmp_args;
va_copy(tmp_args, args);
len = _vscprintf(fmt, tmp_args);
va_end(tmp_args);
if (len < 0) {
*strp = NULL;
return -1;