|
38 | 38 | #include <boost/test/unit_test.hpp>
|
39 | 39 |
|
40 | 40 | using namespace std::literals;
|
| 41 | +static const std::string STRING_WITH_EMBEDDED_NULL_CHAR{"1"s "\0" "1"s}; |
41 | 42 |
|
42 | 43 | /* defined in logging.cpp */
|
43 | 44 | namespace BCLog {
|
@@ -1272,7 +1273,7 @@ BOOST_AUTO_TEST_CASE(util_ParseMoney)
|
1272 | 1273 |
|
1273 | 1274 | // Parsing strings with embedded NUL characters should fail
|
1274 | 1275 | BOOST_CHECK(!ParseMoney("\0-1"s, ret));
|
1275 |
| - BOOST_CHECK(!ParseMoney("\0" "1"s, ret)); |
| 1276 | + BOOST_CHECK(!ParseMoney(STRING_WITH_EMBEDDED_NULL_CHAR, ret)); |
1276 | 1277 | BOOST_CHECK(!ParseMoney("1\0"s, ret));
|
1277 | 1278 | }
|
1278 | 1279 |
|
@@ -1450,9 +1451,7 @@ BOOST_AUTO_TEST_CASE(test_ParseInt32)
|
1450 | 1451 | BOOST_CHECK(!ParseInt32("aap", &n));
|
1451 | 1452 | BOOST_CHECK(!ParseInt32("0x1", &n)); // no hex
|
1452 | 1453 | BOOST_CHECK(!ParseInt32("0x1", &n)); // no hex
|
1453 |
| - const char test_bytes[] = {'1', 0, '1'}; |
1454 |
| - std::string teststr(test_bytes, sizeof(test_bytes)); |
1455 |
| - BOOST_CHECK(!ParseInt32(teststr, &n)); // no embedded NULs |
| 1454 | + BOOST_CHECK(!ParseInt32(STRING_WITH_EMBEDDED_NULL_CHAR, &n)); |
1456 | 1455 | // Overflow and underflow
|
1457 | 1456 | BOOST_CHECK(!ParseInt32("-2147483649", nullptr));
|
1458 | 1457 | BOOST_CHECK(!ParseInt32("2147483648", nullptr));
|
@@ -1480,16 +1479,50 @@ BOOST_AUTO_TEST_CASE(test_ParseInt64)
|
1480 | 1479 | BOOST_CHECK(!ParseInt64("1a", &n));
|
1481 | 1480 | BOOST_CHECK(!ParseInt64("aap", &n));
|
1482 | 1481 | BOOST_CHECK(!ParseInt64("0x1", &n)); // no hex
|
1483 |
| - const char test_bytes[] = {'1', 0, '1'}; |
1484 |
| - std::string teststr(test_bytes, sizeof(test_bytes)); |
1485 |
| - BOOST_CHECK(!ParseInt64(teststr, &n)); // no embedded NULs |
| 1482 | + BOOST_CHECK(!ParseInt64(STRING_WITH_EMBEDDED_NULL_CHAR, &n)); |
1486 | 1483 | // Overflow and underflow
|
1487 | 1484 | BOOST_CHECK(!ParseInt64("-9223372036854775809", nullptr));
|
1488 | 1485 | BOOST_CHECK(!ParseInt64("9223372036854775808", nullptr));
|
1489 | 1486 | BOOST_CHECK(!ParseInt64("-32482348723847471234", nullptr));
|
1490 | 1487 | BOOST_CHECK(!ParseInt64("32482348723847471234", nullptr));
|
1491 | 1488 | }
|
1492 | 1489 |
|
| 1490 | +BOOST_AUTO_TEST_CASE(test_ParseUInt8) |
| 1491 | +{ |
| 1492 | + uint8_t n; |
| 1493 | + // Valid values |
| 1494 | + BOOST_CHECK(ParseUInt8("255", nullptr)); |
| 1495 | + BOOST_CHECK(ParseUInt8("0", &n) && n == 0); |
| 1496 | + BOOST_CHECK(ParseUInt8("255", &n) && n == 255); |
| 1497 | + BOOST_CHECK(ParseUInt8("0255", &n) && n == 255); // no octal |
| 1498 | + BOOST_CHECK(ParseUInt8("255", &n) && n == static_cast<uint8_t>(255)); |
| 1499 | + BOOST_CHECK(ParseUInt8("+255", &n) && n == 255); |
| 1500 | + BOOST_CHECK(ParseUInt8("00000000000000000012", &n) && n == 12); |
| 1501 | + BOOST_CHECK(ParseUInt8("00000000000000000000", &n) && n == 0); |
| 1502 | + // Invalid values |
| 1503 | + BOOST_CHECK(!ParseUInt8("-00000000000000000000", &n)); |
| 1504 | + BOOST_CHECK(!ParseUInt8("", &n)); |
| 1505 | + BOOST_CHECK(!ParseUInt8(" 1", &n)); // no padding inside |
| 1506 | + BOOST_CHECK(!ParseUInt8(" -1", &n)); |
| 1507 | + BOOST_CHECK(!ParseUInt8("++1", &n)); |
| 1508 | + BOOST_CHECK(!ParseUInt8("+-1", &n)); |
| 1509 | + BOOST_CHECK(!ParseUInt8("-+1", &n)); |
| 1510 | + BOOST_CHECK(!ParseUInt8("--1", &n)); |
| 1511 | + BOOST_CHECK(!ParseUInt8("-1", &n)); |
| 1512 | + BOOST_CHECK(!ParseUInt8("1 ", &n)); |
| 1513 | + BOOST_CHECK(!ParseUInt8("1a", &n)); |
| 1514 | + BOOST_CHECK(!ParseUInt8("aap", &n)); |
| 1515 | + BOOST_CHECK(!ParseUInt8("0x1", &n)); // no hex |
| 1516 | + BOOST_CHECK(!ParseUInt8("0x1", &n)); // no hex |
| 1517 | + BOOST_CHECK(!ParseUInt8(STRING_WITH_EMBEDDED_NULL_CHAR, &n)); |
| 1518 | + // Overflow and underflow |
| 1519 | + BOOST_CHECK(!ParseUInt8("-255", &n)); |
| 1520 | + BOOST_CHECK(!ParseUInt8("256", &n)); |
| 1521 | + BOOST_CHECK(!ParseUInt8("-123", &n)); |
| 1522 | + BOOST_CHECK(!ParseUInt8("-123", nullptr)); |
| 1523 | + BOOST_CHECK(!ParseUInt8("256", nullptr)); |
| 1524 | +} |
| 1525 | + |
1493 | 1526 | BOOST_AUTO_TEST_CASE(test_ParseUInt32)
|
1494 | 1527 | {
|
1495 | 1528 | uint32_t n;
|
@@ -1519,9 +1552,7 @@ BOOST_AUTO_TEST_CASE(test_ParseUInt32)
|
1519 | 1552 | BOOST_CHECK(!ParseUInt32("aap", &n));
|
1520 | 1553 | BOOST_CHECK(!ParseUInt32("0x1", &n)); // no hex
|
1521 | 1554 | BOOST_CHECK(!ParseUInt32("0x1", &n)); // no hex
|
1522 |
| - const char test_bytes[] = {'1', 0, '1'}; |
1523 |
| - std::string teststr(test_bytes, sizeof(test_bytes)); |
1524 |
| - BOOST_CHECK(!ParseUInt32(teststr, &n)); // no embedded NULs |
| 1555 | + BOOST_CHECK(!ParseUInt32(STRING_WITH_EMBEDDED_NULL_CHAR, &n)); |
1525 | 1556 | // Overflow and underflow
|
1526 | 1557 | BOOST_CHECK(!ParseUInt32("-2147483648", &n));
|
1527 | 1558 | BOOST_CHECK(!ParseUInt32("4294967296", &n));
|
@@ -1550,9 +1581,7 @@ BOOST_AUTO_TEST_CASE(test_ParseUInt64)
|
1550 | 1581 | BOOST_CHECK(!ParseUInt64("1a", &n));
|
1551 | 1582 | BOOST_CHECK(!ParseUInt64("aap", &n));
|
1552 | 1583 | BOOST_CHECK(!ParseUInt64("0x1", &n)); // no hex
|
1553 |
| - const char test_bytes[] = {'1', 0, '1'}; |
1554 |
| - std::string teststr(test_bytes, sizeof(test_bytes)); |
1555 |
| - BOOST_CHECK(!ParseUInt64(teststr, &n)); // no embedded NULs |
| 1584 | + BOOST_CHECK(!ParseUInt64(STRING_WITH_EMBEDDED_NULL_CHAR, &n)); |
1556 | 1585 | // Overflow and underflow
|
1557 | 1586 | BOOST_CHECK(!ParseUInt64("-9223372036854775809", nullptr));
|
1558 | 1587 | BOOST_CHECK(!ParseUInt64("18446744073709551616", nullptr));
|
@@ -1582,9 +1611,7 @@ BOOST_AUTO_TEST_CASE(test_ParseDouble)
|
1582 | 1611 | BOOST_CHECK(!ParseDouble("1a", &n));
|
1583 | 1612 | BOOST_CHECK(!ParseDouble("aap", &n));
|
1584 | 1613 | BOOST_CHECK(!ParseDouble("0x1", &n)); // no hex
|
1585 |
| - const char test_bytes[] = {'1', 0, '1'}; |
1586 |
| - std::string teststr(test_bytes, sizeof(test_bytes)); |
1587 |
| - BOOST_CHECK(!ParseDouble(teststr, &n)); // no embedded NULs |
| 1614 | + BOOST_CHECK(!ParseDouble(STRING_WITH_EMBEDDED_NULL_CHAR, &n)); |
1588 | 1615 | // Overflow and underflow
|
1589 | 1616 | BOOST_CHECK(!ParseDouble("-1e10000", nullptr));
|
1590 | 1617 | BOOST_CHECK(!ParseDouble("1e10000", nullptr));
|
|
0 commit comments