aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2019-05-29 09:38:32 -0400
committerNick Mathewson <nickm@torproject.org>2019-05-29 09:38:57 -0400
commit0e0cf4abd80249faa23f2bbdb89e62ba96c898f0 (patch)
tree82b647f4a512840726410a11e0ec8709fbb4381a
parent0d5a0b4f0ccc804913fbca20acf5fc62f52570b8 (diff)
downloadtor-0e0cf4abd80249faa23f2bbdb89e62ba96c898f0.tar.gz
tor-0e0cf4abd80249faa23f2bbdb89e62ba96c898f0.zip
Tweak comments in tor_vasprintf(), and add a changes file for 30651
-rw-r--r--changes/bug305616
-rw-r--r--src/common/compat.c10
2 files changed, 12 insertions, 4 deletions
diff --git a/changes/bug30561 b/changes/bug30561
new file mode 100644
index 0000000000..afb3f02c62
--- /dev/null
+++ b/changes/bug30561
@@ -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.
diff --git a/src/common/compat.c b/src/common/compat.c
index d3bc2f5fec..ee3bf0fd50 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -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
* 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];
int len, r;
va_list tmp_args;
va_copy(tmp_args, args);
- /* Use vsnprintf to retrieve needed length. tor_vsnprintf() is not an option
- * here because it will simply return -1 if buf is not large enough to hold the
- * complete string.
+ /* Use vsnprintf to retrieve needed length. tor_vsnprintf() is not an
+ * option here because it will simply return -1 if buf is not large enough
+ * to hold the complete string.
*/
len = vsnprintf(buf, sizeof(buf), fmt, tmp_args);
va_end(tmp_args);
@@ -3550,4 +3553,3 @@ tor_get_avail_disk_space(const char *path)
return -1;
#endif
}
-