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
|
/* 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 */
|
* overflows, so we need to use _vcsprintf to tell how much to allocate */
|
||||||
int len, r;
|
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) {
|
if (len < 0) {
|
||||||
*strp = NULL;
|
*strp = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue