[tor-commits] [tor/master] tinytest tt_{mem, str}_op now handle NULLs better

nickm at torproject.org nickm at torproject.org
Thu Mar 6 17:12:48 UTC 2014


commit 065097b81bad3326a9bd536fbdf646f408638a94
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu Mar 6 12:12:13 2014 -0500

    tinytest tt_{mem,str}_op now handle NULLs better
    
    Now a NULL argument to either makes it fail, not crash.
    
    Fies bug 9004; bugfix on 0.2.2.4-alpha.
---
 changes/bug9004           |    6 ++++++
 src/ext/tinytest_macros.h |    9 +++++++--
 src/test/test.h           |   13 +++++++++----
 3 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/changes/bug9004 b/changes/bug9004
new file mode 100644
index 0000000..5bab7ea
--- /dev/null
+++ b/changes/bug9004
@@ -0,0 +1,6 @@
+  o Minor bugfixes (testing):
+    - Improve the tinytest implementation of string operation tests
+      so that comparisons NULL strings no longer crash the tests;
+      they now just fail, normally. Fixes bug 9004; bugfix on
+      0.2.2.4-alpha.
+
diff --git a/src/ext/tinytest_macros.h b/src/ext/tinytest_macros.h
index 9ff69b1..5bb8f8e 100644
--- a/src/ext/tinytest_macros.h
+++ b/src/ext/tinytest_macros.h
@@ -144,6 +144,10 @@
 	tt_assert_test_fmt_type(a,b,str_test,type,test,type,fmt,	\
 	    {print_=value_;},{},die_on_fail)
 
+#define tt_assert_test_type_opt(a,b,str_test,type,test,fmt,die_on_fail)	\
+	tt_assert_test_fmt_type(a,b,str_test,type,test,type,fmt,	\
+            {print_=value_?value_:"<NULL>";},{},die_on_fail)
+
 /* Helper: assert that a op b, when cast to type.  Format the values with
  * printf format fmt on failure. */
 #define tt_assert_op_type(a,op,b,type,fmt)				\
@@ -163,8 +167,9 @@
 	    (val1_ op val2_),"%p",TT_EXIT_TEST_FUNCTION)
 
 #define tt_str_op(a,op,b)						\
-	tt_assert_test_type(a,b,#a" "#op" "#b,const char *,		\
-	    (strcmp(val1_,val2_) op 0),"<%s>",TT_EXIT_TEST_FUNCTION)
+	tt_assert_test_type_opt(a,b,#a" "#op" "#b,const char *,		\
+	    (val1_ && val2_ && strcmp(val1_,val2_) op 0),"<%s>",	\
+	    TT_EXIT_TEST_FUNCTION)
 
 #define tt_want_int_op(a,op,b)						\
 	tt_assert_test_type(a,b,#a" "#op" "#b,long,(val1_ op val2_),"%ld",(void)0)
diff --git a/src/test/test.h b/src/test/test.h
index a89b558..b902c6e 100644
--- a/src/test/test.h
+++ b/src/test/test.h
@@ -38,12 +38,17 @@
 #define test_mem_op(expr1, op, expr2, len)                              \
   tt_assert_test_fmt_type(expr1,expr2,#expr1" "#op" "#expr2,            \
                           const char *,                                 \
-                          (memcmp(val1_, val2_, len) op 0),             \
+                          (val1_ && val2_ && memcmp(val1_, val2_, len) op 0), \
                           char *, "%s",                                 \
                           { size_t printlen = (len)*2+1;                \
-                            print_ = tor_malloc(printlen);              \
-                            base16_encode(print_, printlen, value_,     \
-                                          (len)); },                    \
+                            if (value_) {                               \
+                              print_ = tor_malloc(printlen);            \
+                              base16_encode(print_, printlen, value_,   \
+                                            (len));                     \
+                            } else {                                    \
+                              print_ = tor_strdup("null");              \
+                            }                                           \
+                          },                                            \
                           { tor_free(print_); },                        \
                           TT_EXIT_TEST_FUNCTION                         \
                           );



More information about the tor-commits mailing list