[tor-commits] [tor/maint-0.4.0] Tweak comments in tor_vasprintf(), and add a changes file for 30651

teor at torproject.org teor at torproject.org
Fri Aug 9 21:29:22 UTC 2019


commit 0e0cf4abd80249faa23f2bbdb89e62ba96c898f0
Author: Nick Mathewson <nickm at torproject.org>
Date:   Wed May 29 09:38:32 2019 -0400

    Tweak comments in tor_vasprintf(), and add a changes file for 30651
---
 changes/bug30561    |  6 ++++++
 src/common/compat.c | 10 ++++++----
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/changes/bug30561 b/changes/bug30561
new file mode 100644
index 000000000..afb3f02c6
--- /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 d3bc2f5fe..ee3bf0fd5 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
 }
-





More information about the tor-commits mailing list