[tor-commits] [tor/release-0.3.1] Avoid sscanf() warnings from openbsd in the unit tests

nickm at torproject.org nickm at torproject.org
Tue Sep 12 21:09:53 UTC 2017


commit d9e2db1efd531b5fb0d47a9c03d19f871145a76d
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Sep 12 15:57:25 2017 -0400

    Avoid sscanf() warnings from openbsd in the unit tests
    
    OpenBSD doesn't like tricks where you use a too-wide sscanf argument
    for a too-narrow array, even when you know the input string
    statically.  The fix here is just to use bigger buffers.
    
    Fixes 15582; bugfix on a3dafd3f58bb312 in 0.2.6.2-alpha.
---
 changes/bug15582     |  4 ++++
 src/test/test_util.c | 21 ++++++++++++++++-----
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/changes/bug15582 b/changes/bug15582
new file mode 100644
index 000000000..5ea6431cf
--- /dev/null
+++ b/changes/bug15582
@@ -0,0 +1,4 @@
+  o Minor bugfixes (compilation):
+    - Avoid compiler warnings in the unit tests for running tor_sscanf()
+      with wide string outputs. Fixes bug 15582; bugfix on 0.2.6.2-alpha.
+
diff --git a/src/test/test_util.c b/src/test/test_util.c
index fcda56456..0b707caee 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -2500,7 +2500,7 @@ test_util_sscanf(void *arg)
 {
   unsigned u1, u2, u3;
   unsigned long ulng;
-  char s1[20], s2[10], s3[10], ch;
+  char s1[20], s2[10], s3[10], ch, *huge = NULL;
   int r;
   long lng1,lng2;
   int int1, int2;
@@ -2512,7 +2512,13 @@ test_util_sscanf(void *arg)
   tt_int_op(-1,OP_EQ,
             tor_sscanf("wrong", "%5c", s1)); /* %c cannot have a number. */
   tt_int_op(-1,OP_EQ, tor_sscanf("hello", "%s", s1)); /* %s needs a number. */
-  tt_int_op(-1,OP_EQ, tor_sscanf("prettylongstring", "%999999s", s1));
+  /* this will fail because we don't allow widths longer than 9999 */
+  {
+    huge = tor_malloc(1000000);
+    r = tor_sscanf("prettylongstring", "%99999s", huge);
+    tor_free(huge);
+    tt_int_op(-1,OP_EQ, r);
+  }
 #if 0
   /* GCC thinks these two are illegal. */
   test_eq(-1, tor_sscanf("prettylongstring", "%0s", s1));
@@ -2618,8 +2624,13 @@ test_util_sscanf(void *arg)
   tt_int_op(2,OP_EQ, tor_sscanf("76trombones", "%6u%9s", &u1, s1)); /* %u%s */
   tt_int_op(76,OP_EQ, u1);
   tt_str_op(s1,OP_EQ, "trombones");
-  tt_int_op(1,OP_EQ, tor_sscanf("prettylongstring", "%999s", s1));
-  tt_str_op(s1,OP_EQ, "prettylongstring");
+  {
+    huge = tor_malloc(1000);
+    r = tor_sscanf("prettylongstring", "%999s", huge);
+    tt_int_op(1,OP_EQ, r);
+    tt_str_op(huge,OP_EQ, "prettylongstring");
+    tor_free(huge);
+  }
   /* %s doesn't eat spaces */
   tt_int_op(2,OP_EQ, tor_sscanf("hello world", "%9s %9s", s1, s2));
   tt_str_op(s1,OP_EQ, "hello");
@@ -2843,7 +2854,7 @@ test_util_sscanf(void *arg)
   test_feq(d4, 3.2);
 
  done:
-  ;
+  tor_free(huge);
 }
 
 #define tt_char_op(a,op,b) tt_assert_op_type(a,op,b,char,"%c")





More information about the tor-commits mailing list