Tweak comments in tor_vasprintf(), and add a changes file for 30651

This commit is contained in:
Nick Mathewson 2019-05-29 09:38:32 -04:00
parent 0d5a0b4f0c
commit 0e0cf4abd8
2 changed files with 12 additions and 4 deletions

6
changes/bug30561 Normal file
View File

@ -0,0 +1,6 @@
o Minor bugfixes (portability):
- Avoid crashing in our tor_vasprintf() implementation on systems that
define neither vasprintf() nor _vscprintf(). (This bug has been here
long enough that we question whether people are running Tor on such
systems, but we're applying the fix out of caution.) Fixes bug 30561;
bugfix on 0.2.8.2-alpha. Found and fixed by Tobias Stoeckmann.

View File

@ -554,13 +554,16 @@ tor_vasprintf(char **strp, const char *fmt, va_list args)
* characters we need. We give it a try on a short buffer first, since * characters we need. We give it a try on a short buffer first, since
* it might be nice to avoid the second vsnprintf call. * it might be nice to avoid the second vsnprintf call.
*/ */
/* XXXX This code spent a number of years broken (see bug 30651). It is
* possible that no Tor users actually run on systems without vasprintf() or
* _vscprintf(). If so, we should consider removing this code. */
char buf[128]; char buf[128];
int len, r; int len, r;
va_list tmp_args; va_list tmp_args;
va_copy(tmp_args, args); va_copy(tmp_args, args);
/* Use vsnprintf to retrieve needed length. tor_vsnprintf() is not an option /* Use vsnprintf to retrieve needed length. tor_vsnprintf() is not an
* here because it will simply return -1 if buf is not large enough to hold the * option here because it will simply return -1 if buf is not large enough
* complete string. * to hold the complete string.
*/ */
len = vsnprintf(buf, sizeof(buf), fmt, tmp_args); len = vsnprintf(buf, sizeof(buf), fmt, tmp_args);
va_end(tmp_args); va_end(tmp_args);
@ -3550,4 +3553,3 @@ tor_get_avail_disk_space(const char *path)
return -1; return -1;
#endif #endif
} }