diff options
author | Nick Mathewson <nickm@torproject.org> | 2014-09-10 23:59:21 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2014-09-10 23:59:21 -0400 |
commit | 59f9a5c78695213442599e8f2e8a535e8a9cc666 (patch) | |
tree | 685a37f894dabb4368117e181fa83205dcdc5bea /src/test/test_dir.c | |
parent | 5126bc2ebd9ae67449e3c4f18828acb895d86308 (diff) | |
download | tor-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.c | 27 |
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: ; } |