commit de8110fba2b177d0fcd0f1b92a42caae8cf7addf Author: Nick Mathewson nickm@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 },
tor-commits@lists.torproject.org