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:
parent
74e84b7eb7
commit
286fa94064
|
@ -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.
|
||||
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue