summaryrefslogtreecommitdiff
path: root/src/test/test_dir.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2014-09-10 23:59:21 -0400
committerNick Mathewson <nickm@torproject.org>2014-09-10 23:59:21 -0400
commit59f9a5c78695213442599e8f2e8a535e8a9cc666 (patch)
tree685a37f894dabb4368117e181fa83205dcdc5bea /src/test/test_dir.c
parent5126bc2ebd9ae67449e3c4f18828acb895d86308 (diff)
downloadtor-59f9a5c78695213442599e8f2e8a535e8a9cc666.tar.gz
tor-59f9a5c78695213442599e8f2e8a535e8a9cc666.zip
Avoid divide by zero and NaNs in scale_array_elements_to_u64
Patch from teor; part of 13104
Diffstat (limited to 'src/test/test_dir.c')
-rw-r--r--src/test/test_dir.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index c03b63be27..1b56bcdd3d 100644
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@ -1749,10 +1749,37 @@ test_dir_scale_bw(void *testdata)
tt_assert(total <= (U64_LITERAL(1)<<62));
for (i=0; i<8; ++i) {
+ /* vals[2].u64 is the scaled value of 1.0 */
double ratio = ((double)vals[i].u64) / vals[2].u64;
tt_double_op(fabs(ratio - v[i]), <, .00001);
}
+ /* test handling of no entries */
+ total = 1;
+ scale_array_elements_to_u64(vals, 0, &total);
+ tt_assert(total == 0);
+
+ /* make sure we don't read the array when we have no entries
+ * may require compiler flags to catch NULL dereferences */
+ total = 1;
+ scale_array_elements_to_u64(NULL, 0, &total);
+ tt_assert(total == 0);
+
+ scale_array_elements_to_u64(NULL, 0, NULL);
+
+ /* test handling of zero totals */
+ total = 1;
+ vals[0].dbl = 0.0;
+ scale_array_elements_to_u64(vals, 1, &total);
+ tt_assert(total == 0);
+ tt_assert(vals[0].u64 == 0);
+
+ vals[0].dbl = 0.0;
+ vals[1].dbl = 0.0;
+ scale_array_elements_to_u64(vals, 2, NULL);
+ tt_assert(vals[0].u64 == 0);
+ tt_assert(vals[1].u64 == 0);
+
done:
;
}