aboutsummaryrefslogtreecommitdiff
path: root/src/test/test_confparse.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2019-11-11 12:20:14 -0500
committerNick Mathewson <nickm@torproject.org>2019-11-11 12:20:14 -0500
commit7c3378fb8d37e1f22ae7f04012e3e57a16b7f2fc (patch)
treea0cd68ca420872d26dc689d49ae1fbd6d71fc8ee /src/test/test_confparse.c
parent01af3a55f41de991c0b59d5bf12c100c82829b47 (diff)
parent42ba3997d64591822411fbbedd51a240dbbb5fab (diff)
downloadtor-7c3378fb8d37e1f22ae7f04012e3e57a16b7f2fc.tar.gz
tor-7c3378fb8d37e1f22ae7f04012e3e57a16b7f2fc.zip
Merge remote-tracking branch 'tor-github/pr/1338'
Diffstat (limited to 'src/test/test_confparse.c')
-rw-r--r--src/test/test_confparse.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/test/test_confparse.c b/src/test/test_confparse.c
index 3e122a5129..808389de14 100644
--- a/src/test/test_confparse.c
+++ b/src/test/test_confparse.c
@@ -898,11 +898,22 @@ test_confparse_unitparse(void *args)
tt_assert(ok);
/* u64 overflow */
- /* XXXX our implementation does not currently detect this. See bug 30920. */
- /*
tt_u64_op(config_parse_memunit("20000000 TB", &ok), OP_EQ, 0);
tt_assert(!ok);
- */
+ // This test fails the double check as the float representing 15000000.5 TB
+ // is greater than (double) INT64_MAX
+ tt_u64_op(config_parse_memunit("15000000.5 TB", &ok), OP_EQ, 0);
+ tt_assert(!ok);
+ // 8388608.1 TB passes double check because it falls in the same float
+ // value as (double)INT64_MAX (which is 2^63) due to precision.
+ // But will fail the int check because the unsigned representation of
+ // the float, which is 2^63, is strictly greater than INT64_MAX (2^63-1)
+ tt_u64_op(config_parse_memunit("8388608.1 TB", &ok), OP_EQ, 0);
+ tt_assert(!ok);
+
+ /* negative float */
+ tt_u64_op(config_parse_memunit("-1.5 GB", &ok), OP_EQ, 0);
+ tt_assert(!ok);
/* i32 overflow */
tt_int_op(config_parse_interval("1000 months", &ok), OP_EQ, -1);