[tor-commits] [tor/master] Explicitly test our get/set_uint{8, 16, 32, 64}.

nickm at torproject.org nickm at torproject.org
Tue Jan 5 07:03:25 UTC 2016


commit de8110fba2b177d0fcd0f1b92a42caae8cf7addf
Author: Nick Mathewson <nickm at torproject.org>
Date:   Sun Jan 3 08:27:54 2016 -0800

    Explicitly test our get/set_uint{8,16,32,64}.
---
 configure.ac                |    1 +
 src/test/test_util_format.c |   40 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/configure.ac b/configure.ac
index a47cee6..7dfab58 100644
--- a/configure.ac
+++ b/configure.ac
@@ -391,6 +391,7 @@ AC_CHECK_FUNCS(
         getrlimit \
         gettimeofday \
         gmtime_r \
+	htonll \
         inet_aton \
         ioctl \
         issetugid \
diff --git a/src/test/test_util_format.c b/src/test/test_util_format.c
index 705dfcf..45a28cc 100644
--- a/src/test/test_util_format.c
+++ b/src/test/test_util_format.c
@@ -11,6 +11,44 @@
 
 #define NS_MODULE util_format
 
+#if !defined(HAVE_HTONLL) && !defined(htonll)
+#ifdef WORDS_BIGENDIAN
+#define htonll(x) (x)
+#else
+static uint64_t
+htonll(uint64_t a)
+{
+  return htonl((uint32_t)(a>>32)) | (((uint64_t)htonl((uint32_t)a))<<32);
+}
+#endif
+#endif
+
+static void
+test_util_format_unaligned_accessors(void *ignored)
+{
+  (void)ignored;
+  char buf[9] = "onionsoup"; // 6f6e696f6e736f7570
+
+  tt_u64_op(get_uint64(buf+1), OP_EQ, htonll(U64_LITERAL(0x6e696f6e736f7570)));
+  tt_uint_op(get_uint32(buf+1), OP_EQ, htonl(0x6e696f6e));
+  tt_uint_op(get_uint16(buf+1), OP_EQ, htons(0x6e69));
+  tt_uint_op(get_uint8(buf+1), OP_EQ, 0x6e);
+
+  set_uint8(buf+7, 0x61);
+  tt_mem_op(buf, OP_EQ, "onionsoap", 9);
+
+  set_uint16(buf+6, htons(0x746f));
+  tt_mem_op(buf, OP_EQ, "onionstop", 9);
+
+  set_uint32(buf+1, htonl(0x78696465));
+  tt_mem_op(buf, OP_EQ, "oxidestop", 9);
+
+  set_uint64(buf+1, htonll(U64_LITERAL(0x6266757363617465)));
+  tt_mem_op(buf, OP_EQ, "obfuscate", 9);
+ done:
+  ;
+}
+
 static void
 test_util_format_base64_encode(void *ignored)
 {
@@ -252,6 +290,8 @@ test_util_format_base16_decode(void *ignored)
 }
 
 struct testcase_t util_format_tests[] = {
+  { "unaligned_accessors", test_util_format_unaligned_accessors, 0,
+    NULL, NULL },
   { "base64_encode", test_util_format_base64_encode, 0, NULL, NULL },
   { "base64_decode_nopad", test_util_format_base64_decode_nopad, 0,
     NULL, NULL },





More information about the tor-commits mailing list