@ -38,6 +38,7 @@
# include <boost/test/unit_test.hpp>
using namespace std : : literals ;
static const std : : string STRING_WITH_EMBEDDED_NULL_CHAR { " 1 " s " \0 " " 1 " s } ;
/* defined in logging.cpp */
namespace BCLog {
@ -1272,7 +1273,7 @@ BOOST_AUTO_TEST_CASE(util_ParseMoney)
// Parsing strings with embedded NUL characters should fail
BOOST_CHECK ( ! ParseMoney ( " \0 -1 " s , ret ) ) ;
BOOST_CHECK ( ! ParseMoney ( " \0 " " 1 " s , ret ) ) ;
BOOST_CHECK ( ! ParseMoney ( STRING_WITH_EMBEDDED_NULL_CHAR , ret ) ) ;
BOOST_CHECK ( ! ParseMoney ( " 1 \0 " s , ret ) ) ;
}
@ -1450,9 +1451,7 @@ BOOST_AUTO_TEST_CASE(test_ParseInt32)
BOOST_CHECK ( ! ParseInt32 ( " aap " , & n ) ) ;
BOOST_CHECK ( ! ParseInt32 ( " 0x1 " , & n ) ) ; // no hex
BOOST_CHECK ( ! ParseInt32 ( " 0x1 " , & n ) ) ; // no hex
const char test_bytes [ ] = { ' 1 ' , 0 , ' 1 ' } ;
std : : string teststr ( test_bytes , sizeof ( test_bytes ) ) ;
BOOST_CHECK ( ! ParseInt32 ( teststr , & n ) ) ; // no embedded NULs
BOOST_CHECK ( ! ParseInt32 ( STRING_WITH_EMBEDDED_NULL_CHAR , & n ) ) ;
// Overflow and underflow
BOOST_CHECK ( ! ParseInt32 ( " -2147483649 " , nullptr ) ) ;
BOOST_CHECK ( ! ParseInt32 ( " 2147483648 " , nullptr ) ) ;
@ -1480,9 +1479,7 @@ BOOST_AUTO_TEST_CASE(test_ParseInt64)
BOOST_CHECK ( ! ParseInt64 ( " 1a " , & n ) ) ;
BOOST_CHECK ( ! ParseInt64 ( " aap " , & n ) ) ;
BOOST_CHECK ( ! ParseInt64 ( " 0x1 " , & n ) ) ; // no hex
const char test_bytes [ ] = { ' 1 ' , 0 , ' 1 ' } ;
std : : string teststr ( test_bytes , sizeof ( test_bytes ) ) ;
BOOST_CHECK ( ! ParseInt64 ( teststr , & n ) ) ; // no embedded NULs
BOOST_CHECK ( ! ParseInt64 ( STRING_WITH_EMBEDDED_NULL_CHAR , & n ) ) ;
// Overflow and underflow
BOOST_CHECK ( ! ParseInt64 ( " -9223372036854775809 " , nullptr ) ) ;
BOOST_CHECK ( ! ParseInt64 ( " 9223372036854775808 " , nullptr ) ) ;
@ -1490,6 +1487,42 @@ BOOST_AUTO_TEST_CASE(test_ParseInt64)
BOOST_CHECK ( ! ParseInt64 ( " 32482348723847471234 " , nullptr ) ) ;
}
BOOST_AUTO_TEST_CASE ( test_ParseUInt8 )
{
uint8_t n ;
// Valid values
BOOST_CHECK ( ParseUInt8 ( " 255 " , nullptr ) ) ;
BOOST_CHECK ( ParseUInt8 ( " 0 " , & n ) & & n = = 0 ) ;
BOOST_CHECK ( ParseUInt8 ( " 255 " , & n ) & & n = = 255 ) ;
BOOST_CHECK ( ParseUInt8 ( " 0255 " , & n ) & & n = = 255 ) ; // no octal
BOOST_CHECK ( ParseUInt8 ( " 255 " , & n ) & & n = = static_cast < uint8_t > ( 255 ) ) ;
BOOST_CHECK ( ParseUInt8 ( " +255 " , & n ) & & n = = 255 ) ;
BOOST_CHECK ( ParseUInt8 ( " 00000000000000000012 " , & n ) & & n = = 12 ) ;
BOOST_CHECK ( ParseUInt8 ( " 00000000000000000000 " , & n ) & & n = = 0 ) ;
// Invalid values
BOOST_CHECK ( ! ParseUInt8 ( " -00000000000000000000 " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " 1 " , & n ) ) ; // no padding inside
BOOST_CHECK ( ! ParseUInt8 ( " -1 " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " ++1 " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " +-1 " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " -+1 " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " --1 " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " -1 " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " 1 " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " 1a " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " aap " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " 0x1 " , & n ) ) ; // no hex
BOOST_CHECK ( ! ParseUInt8 ( " 0x1 " , & n ) ) ; // no hex
BOOST_CHECK ( ! ParseUInt8 ( STRING_WITH_EMBEDDED_NULL_CHAR , & n ) ) ;
// Overflow and underflow
BOOST_CHECK ( ! ParseUInt8 ( " -255 " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " 256 " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " -123 " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " -123 " , nullptr ) ) ;
BOOST_CHECK ( ! ParseUInt8 ( " 256 " , nullptr ) ) ;
}
BOOST_AUTO_TEST_CASE ( test_ParseUInt32 )
{
uint32_t n ;
@ -1519,9 +1552,7 @@ BOOST_AUTO_TEST_CASE(test_ParseUInt32)
BOOST_CHECK ( ! ParseUInt32 ( " aap " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt32 ( " 0x1 " , & n ) ) ; // no hex
BOOST_CHECK ( ! ParseUInt32 ( " 0x1 " , & n ) ) ; // no hex
const char test_bytes [ ] = { ' 1 ' , 0 , ' 1 ' } ;
std : : string teststr ( test_bytes , sizeof ( test_bytes ) ) ;
BOOST_CHECK ( ! ParseUInt32 ( teststr , & n ) ) ; // no embedded NULs
BOOST_CHECK ( ! ParseUInt32 ( STRING_WITH_EMBEDDED_NULL_CHAR , & n ) ) ;
// Overflow and underflow
BOOST_CHECK ( ! ParseUInt32 ( " -2147483648 " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt32 ( " 4294967296 " , & n ) ) ;
@ -1550,9 +1581,7 @@ BOOST_AUTO_TEST_CASE(test_ParseUInt64)
BOOST_CHECK ( ! ParseUInt64 ( " 1a " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt64 ( " aap " , & n ) ) ;
BOOST_CHECK ( ! ParseUInt64 ( " 0x1 " , & n ) ) ; // no hex
const char test_bytes [ ] = { ' 1 ' , 0 , ' 1 ' } ;
std : : string teststr ( test_bytes , sizeof ( test_bytes ) ) ;
BOOST_CHECK ( ! ParseUInt64 ( teststr , & n ) ) ; // no embedded NULs
BOOST_CHECK ( ! ParseUInt64 ( STRING_WITH_EMBEDDED_NULL_CHAR , & n ) ) ;
// Overflow and underflow
BOOST_CHECK ( ! ParseUInt64 ( " -9223372036854775809 " , nullptr ) ) ;
BOOST_CHECK ( ! ParseUInt64 ( " 18446744073709551616 " , nullptr ) ) ;
@ -1582,9 +1611,7 @@ BOOST_AUTO_TEST_CASE(test_ParseDouble)
BOOST_CHECK ( ! ParseDouble ( " 1a " , & n ) ) ;
BOOST_CHECK ( ! ParseDouble ( " aap " , & n ) ) ;
BOOST_CHECK ( ! ParseDouble ( " 0x1 " , & n ) ) ; // no hex
const char test_bytes [ ] = { ' 1 ' , 0 , ' 1 ' } ;
std : : string teststr ( test_bytes , sizeof ( test_bytes ) ) ;
BOOST_CHECK ( ! ParseDouble ( teststr , & n ) ) ; // no embedded NULs
BOOST_CHECK ( ! ParseDouble ( STRING_WITH_EMBEDDED_NULL_CHAR , & n ) ) ;
// Overflow and underflow
BOOST_CHECK ( ! ParseDouble ( " -1e10000 " , nullptr ) ) ;
BOOST_CHECK ( ! ParseDouble ( " 1e10000 " , nullptr ) ) ;