Skip to content

Commit 0e5745c

Browse files
practicalswiftPiRK
authored andcommitted
test: Add testing of ParseInt/ParseUInt edge cases with leading +/-/0:s
Summary: This is a backport of [[bitcoin/bitcoin#20472 | core#20472]] Test Plan: `ninja check` Reviewers: #bitcoin_abc, Fabien Reviewed By: #bitcoin_abc, Fabien Differential Revision: https://reviews.bitcoinabc.org/D11091
1 parent c754dfe commit 0e5745c

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

src/test/util_tests.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1661,10 +1661,18 @@ BOOST_AUTO_TEST_CASE(test_ParseInt32) {
16611661
// (-2147483647 - 1) equals INT_MIN
16621662
BOOST_CHECK(ParseInt32("-2147483648", &n) && n == (-2147483647 - 1));
16631663
BOOST_CHECK(ParseInt32("-1234", &n) && n == -1234);
1664+
BOOST_CHECK(ParseInt32("00000000000000001234", &n) && n == 1234);
1665+
BOOST_CHECK(ParseInt32("-00000000000000001234", &n) && n == -1234);
1666+
BOOST_CHECK(ParseInt32("00000000000000000000", &n) && n == 0);
1667+
BOOST_CHECK(ParseInt32("-00000000000000000000", &n) && n == 0);
16641668
// Invalid values
16651669
BOOST_CHECK(!ParseInt32("", &n));
16661670
BOOST_CHECK(!ParseInt32(" 1", &n)); // no padding inside
16671671
BOOST_CHECK(!ParseInt32("1 ", &n));
1672+
BOOST_CHECK(!ParseInt32("++1", &n));
1673+
BOOST_CHECK(!ParseInt32("+-1", &n));
1674+
BOOST_CHECK(!ParseInt32("-+1", &n));
1675+
BOOST_CHECK(!ParseInt32("--1", &n));
16681676
BOOST_CHECK(!ParseInt32("1a", &n));
16691677
BOOST_CHECK(!ParseInt32("aap", &n));
16701678
BOOST_CHECK(!ParseInt32("0x1", &n)); // no hex
@@ -1783,10 +1791,19 @@ BOOST_AUTO_TEST_CASE(test_ParseUInt32) {
17831791
BOOST_CHECK(ParseUInt32("2147483647", &n) && n == 2147483647);
17841792
BOOST_CHECK(ParseUInt32("2147483648", &n) && n == (uint32_t)2147483648);
17851793
BOOST_CHECK(ParseUInt32("4294967295", &n) && n == (uint32_t)4294967295);
1794+
BOOST_CHECK(ParseUInt32("+1234", &n) && n == 1234);
1795+
BOOST_CHECK(ParseUInt32("00000000000000001234", &n) && n == 1234);
1796+
BOOST_CHECK(ParseUInt32("00000000000000000000", &n) && n == 0);
17861797
// Invalid values
1798+
BOOST_CHECK(!ParseUInt32("-00000000000000000000", &n));
17871799
BOOST_CHECK(!ParseUInt32("", &n));
17881800
BOOST_CHECK(!ParseUInt32(" 1", &n)); // no padding inside
17891801
BOOST_CHECK(!ParseUInt32(" -1", &n));
1802+
BOOST_CHECK(!ParseUInt32("++1", &n));
1803+
BOOST_CHECK(!ParseUInt32("+-1", &n));
1804+
BOOST_CHECK(!ParseUInt32("-+1", &n));
1805+
BOOST_CHECK(!ParseUInt32("--1", &n));
1806+
BOOST_CHECK(!ParseUInt32("-1", &n));
17901807
BOOST_CHECK(!ParseUInt32("1 ", &n));
17911808
BOOST_CHECK(!ParseUInt32("1a", &n));
17921809
BOOST_CHECK(!ParseUInt32("aap", &n));

0 commit comments

Comments
 (0)