mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-22 04:38:55 +02:00
Merge bitcoin/bitcoin#32520: Remove legacy Parse(U)Int*
faf55fc80bdoc: Remove ParseInt mentions in documentation (MarcoFalke)3333282933refactor: Remove unused Parse(U)Int* (MarcoFalke)fa84e6c36cbitcoin-tx: Reject + sign in MutateTxDel* (MarcoFalke)face2519fabitcoin-tx: Reject + sign in vout parsing (MarcoFalke)fa8acaf0b9bitcoin-tx: Reject + sign in replaceable parsing (MarcoFalke)faff25a558bitcoin-tx: Reject + sign in locktime (MarcoFalke)dddd9e5fe3bitcoin-tx: Reject + sign in nversion parsing (MarcoFalke)fab06ac037rest: Use SAFE_CHARS_URI in SanitizeString error msg (MarcoFalke)8888bb499drest: Reject + sign in /blockhashbyheight/ (MarcoFalke)fafd43c691test: Reject + sign when parsing regtest deployment params (MarcoFalke)fa123afa0eReject + sign when checking -ipcfd (MarcoFalke)fa479857edReject + sign in SplitHostPort (MarcoFalke)fab4c2967dnet: Reject + sign when parsing subnet mask (MarcoFalke)fa89652e68init: Reject + sign in -*port parsing (MarcoFalke)fa9c45577dcli: Reject + sign in -netinfo level parsing (MarcoFalke)fa98041325refactor: Use ToIntegral in CreateFromDump (MarcoFalke)fa23ed7fc2refactor: Use ToIntegral in ParseHDKeypath (MarcoFalke) Pull request description: The legacy int parsing is problematic, because it accepts the `+` sign for unsigned integers. In all cases this is either: * Useless, because the `+` sign was already rejected. * Erroneous and inconsistent, when third party parsers reject it. (C.f. https://github.com/bitcoin/bitcoin/pull/32365) * Confusing, because the `+` sign is neither documented, nor can it be assumed to be present. Fix all issues by removing the legacy int parsing. ACKs for top commit: stickies-v: re-ACKfaf55fc80bbrunoerg: code review ACKfaf55fc80bTree-SHA512: a311ab6a58fe02a37741c1800feb3dcfad92377b4bfb61b433b2393f52ba89ef45d00940972b2767b213a3dd7b59e5e35d5b659c586eacdfe4e565a77b12b19f
This commit is contained in:
@@ -648,40 +648,6 @@ BOOST_AUTO_TEST_CASE(util_overflow)
|
||||
TestAddMatrix<signed>();
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_ParseInt32)
|
||||
{
|
||||
int32_t n;
|
||||
// Valid values
|
||||
BOOST_CHECK(ParseInt32("1234", nullptr));
|
||||
BOOST_CHECK(ParseInt32("0", &n) && n == 0);
|
||||
BOOST_CHECK(ParseInt32("1234", &n) && n == 1234);
|
||||
BOOST_CHECK(ParseInt32("01234", &n) && n == 1234); // no octal
|
||||
BOOST_CHECK(ParseInt32("2147483647", &n) && n == 2147483647);
|
||||
BOOST_CHECK(ParseInt32("-2147483648", &n) && n == (-2147483647 - 1)); // (-2147483647 - 1) equals INT_MIN
|
||||
BOOST_CHECK(ParseInt32("-1234", &n) && n == -1234);
|
||||
BOOST_CHECK(ParseInt32("00000000000000001234", &n) && n == 1234);
|
||||
BOOST_CHECK(ParseInt32("-00000000000000001234", &n) && n == -1234);
|
||||
BOOST_CHECK(ParseInt32("00000000000000000000", &n) && n == 0);
|
||||
BOOST_CHECK(ParseInt32("-00000000000000000000", &n) && n == 0);
|
||||
// Invalid values
|
||||
BOOST_CHECK(!ParseInt32("", &n));
|
||||
BOOST_CHECK(!ParseInt32(" 1", &n)); // no padding inside
|
||||
BOOST_CHECK(!ParseInt32("1 ", &n));
|
||||
BOOST_CHECK(!ParseInt32("++1", &n));
|
||||
BOOST_CHECK(!ParseInt32("+-1", &n));
|
||||
BOOST_CHECK(!ParseInt32("-+1", &n));
|
||||
BOOST_CHECK(!ParseInt32("--1", &n));
|
||||
BOOST_CHECK(!ParseInt32("1a", &n));
|
||||
BOOST_CHECK(!ParseInt32("aap", &n));
|
||||
BOOST_CHECK(!ParseInt32("0x1", &n)); // no hex
|
||||
BOOST_CHECK(!ParseInt32(STRING_WITH_EMBEDDED_NULL_CHAR, &n));
|
||||
// Overflow and underflow
|
||||
BOOST_CHECK(!ParseInt32("-2147483649", nullptr));
|
||||
BOOST_CHECK(!ParseInt32("2147483648", nullptr));
|
||||
BOOST_CHECK(!ParseInt32("-32482348723847471234", nullptr));
|
||||
BOOST_CHECK(!ParseInt32("32482348723847471234", nullptr));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static void RunToIntegralTests()
|
||||
{
|
||||
@@ -869,171 +835,6 @@ BOOST_AUTO_TEST_CASE(test_LocaleIndependentAtoi)
|
||||
BOOST_CHECK_EQUAL(LocaleIndependentAtoi<uint8_t>("256"), 255U);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_ParseInt64)
|
||||
{
|
||||
int64_t n;
|
||||
// Valid values
|
||||
BOOST_CHECK(ParseInt64("1234", nullptr));
|
||||
BOOST_CHECK(ParseInt64("0", &n) && n == 0LL);
|
||||
BOOST_CHECK(ParseInt64("1234", &n) && n == 1234LL);
|
||||
BOOST_CHECK(ParseInt64("01234", &n) && n == 1234LL); // no octal
|
||||
BOOST_CHECK(ParseInt64("2147483647", &n) && n == 2147483647LL);
|
||||
BOOST_CHECK(ParseInt64("-2147483648", &n) && n == -2147483648LL);
|
||||
BOOST_CHECK(ParseInt64("9223372036854775807", &n) && n == int64_t{9223372036854775807});
|
||||
BOOST_CHECK(ParseInt64("-9223372036854775808", &n) && n == int64_t{-9223372036854775807-1});
|
||||
BOOST_CHECK(ParseInt64("-1234", &n) && n == -1234LL);
|
||||
// Invalid values
|
||||
BOOST_CHECK(!ParseInt64("", &n));
|
||||
BOOST_CHECK(!ParseInt64(" 1", &n)); // no padding inside
|
||||
BOOST_CHECK(!ParseInt64("1 ", &n));
|
||||
BOOST_CHECK(!ParseInt64("1a", &n));
|
||||
BOOST_CHECK(!ParseInt64("aap", &n));
|
||||
BOOST_CHECK(!ParseInt64("0x1", &n)); // no hex
|
||||
BOOST_CHECK(!ParseInt64(STRING_WITH_EMBEDDED_NULL_CHAR, &n));
|
||||
// Overflow and underflow
|
||||
BOOST_CHECK(!ParseInt64("-9223372036854775809", nullptr));
|
||||
BOOST_CHECK(!ParseInt64("9223372036854775808", nullptr));
|
||||
BOOST_CHECK(!ParseInt64("-32482348723847471234", nullptr));
|
||||
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(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_ParseUInt16)
|
||||
{
|
||||
uint16_t n;
|
||||
// Valid values
|
||||
BOOST_CHECK(ParseUInt16("1234", nullptr));
|
||||
BOOST_CHECK(ParseUInt16("0", &n) && n == 0);
|
||||
BOOST_CHECK(ParseUInt16("1234", &n) && n == 1234);
|
||||
BOOST_CHECK(ParseUInt16("01234", &n) && n == 1234); // no octal
|
||||
BOOST_CHECK(ParseUInt16("65535", &n) && n == static_cast<uint16_t>(65535));
|
||||
BOOST_CHECK(ParseUInt16("+65535", &n) && n == 65535);
|
||||
BOOST_CHECK(ParseUInt16("00000000000000000012", &n) && n == 12);
|
||||
BOOST_CHECK(ParseUInt16("00000000000000000000", &n) && n == 0);
|
||||
// Invalid values
|
||||
BOOST_CHECK(!ParseUInt16("-00000000000000000000", &n));
|
||||
BOOST_CHECK(!ParseUInt16("", &n));
|
||||
BOOST_CHECK(!ParseUInt16(" 1", &n)); // no padding inside
|
||||
BOOST_CHECK(!ParseUInt16(" -1", &n));
|
||||
BOOST_CHECK(!ParseUInt16("++1", &n));
|
||||
BOOST_CHECK(!ParseUInt16("+-1", &n));
|
||||
BOOST_CHECK(!ParseUInt16("-+1", &n));
|
||||
BOOST_CHECK(!ParseUInt16("--1", &n));
|
||||
BOOST_CHECK(!ParseUInt16("-1", &n));
|
||||
BOOST_CHECK(!ParseUInt16("1 ", &n));
|
||||
BOOST_CHECK(!ParseUInt16("1a", &n));
|
||||
BOOST_CHECK(!ParseUInt16("aap", &n));
|
||||
BOOST_CHECK(!ParseUInt16("0x1", &n)); // no hex
|
||||
BOOST_CHECK(!ParseUInt16(STRING_WITH_EMBEDDED_NULL_CHAR, &n));
|
||||
// Overflow and underflow
|
||||
BOOST_CHECK(!ParseUInt16("-65535", &n));
|
||||
BOOST_CHECK(!ParseUInt16("65536", &n));
|
||||
BOOST_CHECK(!ParseUInt16("-123", &n));
|
||||
BOOST_CHECK(!ParseUInt16("-123", nullptr));
|
||||
BOOST_CHECK(!ParseUInt16("65536", nullptr));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_ParseUInt32)
|
||||
{
|
||||
uint32_t n;
|
||||
// Valid values
|
||||
BOOST_CHECK(ParseUInt32("1234", nullptr));
|
||||
BOOST_CHECK(ParseUInt32("0", &n) && n == 0);
|
||||
BOOST_CHECK(ParseUInt32("1234", &n) && n == 1234);
|
||||
BOOST_CHECK(ParseUInt32("01234", &n) && n == 1234); // no octal
|
||||
BOOST_CHECK(ParseUInt32("2147483647", &n) && n == 2147483647);
|
||||
BOOST_CHECK(ParseUInt32("2147483648", &n) && n == uint32_t{2147483648});
|
||||
BOOST_CHECK(ParseUInt32("4294967295", &n) && n == uint32_t{4294967295});
|
||||
BOOST_CHECK(ParseUInt32("+1234", &n) && n == 1234);
|
||||
BOOST_CHECK(ParseUInt32("00000000000000001234", &n) && n == 1234);
|
||||
BOOST_CHECK(ParseUInt32("00000000000000000000", &n) && n == 0);
|
||||
// Invalid values
|
||||
BOOST_CHECK(!ParseUInt32("-00000000000000000000", &n));
|
||||
BOOST_CHECK(!ParseUInt32("", &n));
|
||||
BOOST_CHECK(!ParseUInt32(" 1", &n)); // no padding inside
|
||||
BOOST_CHECK(!ParseUInt32(" -1", &n));
|
||||
BOOST_CHECK(!ParseUInt32("++1", &n));
|
||||
BOOST_CHECK(!ParseUInt32("+-1", &n));
|
||||
BOOST_CHECK(!ParseUInt32("-+1", &n));
|
||||
BOOST_CHECK(!ParseUInt32("--1", &n));
|
||||
BOOST_CHECK(!ParseUInt32("-1", &n));
|
||||
BOOST_CHECK(!ParseUInt32("1 ", &n));
|
||||
BOOST_CHECK(!ParseUInt32("1a", &n));
|
||||
BOOST_CHECK(!ParseUInt32("aap", &n));
|
||||
BOOST_CHECK(!ParseUInt32("0x1", &n)); // no hex
|
||||
BOOST_CHECK(!ParseUInt32(STRING_WITH_EMBEDDED_NULL_CHAR, &n));
|
||||
// Overflow and underflow
|
||||
BOOST_CHECK(!ParseUInt32("-2147483648", &n));
|
||||
BOOST_CHECK(!ParseUInt32("4294967296", &n));
|
||||
BOOST_CHECK(!ParseUInt32("-1234", &n));
|
||||
BOOST_CHECK(!ParseUInt32("-32482348723847471234", nullptr));
|
||||
BOOST_CHECK(!ParseUInt32("32482348723847471234", nullptr));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_ParseUInt64)
|
||||
{
|
||||
uint64_t n;
|
||||
// Valid values
|
||||
BOOST_CHECK(ParseUInt64("1234", nullptr));
|
||||
BOOST_CHECK(ParseUInt64("0", &n) && n == 0LL);
|
||||
BOOST_CHECK(ParseUInt64("1234", &n) && n == 1234LL);
|
||||
BOOST_CHECK(ParseUInt64("01234", &n) && n == 1234LL); // no octal
|
||||
BOOST_CHECK(ParseUInt64("2147483647", &n) && n == 2147483647LL);
|
||||
BOOST_CHECK(ParseUInt64("9223372036854775807", &n) && n == 9223372036854775807ULL);
|
||||
BOOST_CHECK(ParseUInt64("9223372036854775808", &n) && n == 9223372036854775808ULL);
|
||||
BOOST_CHECK(ParseUInt64("18446744073709551615", &n) && n == 18446744073709551615ULL);
|
||||
// Invalid values
|
||||
BOOST_CHECK(!ParseUInt64("", &n));
|
||||
BOOST_CHECK(!ParseUInt64(" 1", &n)); // no padding inside
|
||||
BOOST_CHECK(!ParseUInt64(" -1", &n));
|
||||
BOOST_CHECK(!ParseUInt64("1 ", &n));
|
||||
BOOST_CHECK(!ParseUInt64("1a", &n));
|
||||
BOOST_CHECK(!ParseUInt64("aap", &n));
|
||||
BOOST_CHECK(!ParseUInt64("0x1", &n)); // no hex
|
||||
BOOST_CHECK(!ParseUInt64(STRING_WITH_EMBEDDED_NULL_CHAR, &n));
|
||||
// Overflow and underflow
|
||||
BOOST_CHECK(!ParseUInt64("-9223372036854775809", nullptr));
|
||||
BOOST_CHECK(!ParseUInt64("18446744073709551616", nullptr));
|
||||
BOOST_CHECK(!ParseUInt64("-32482348723847471234", nullptr));
|
||||
BOOST_CHECK(!ParseUInt64("-2147483648", &n));
|
||||
BOOST_CHECK(!ParseUInt64("-9223372036854775808", &n));
|
||||
BOOST_CHECK(!ParseUInt64("-1234", &n));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_FormatParagraph)
|
||||
{
|
||||
BOOST_CHECK_EQUAL(FormatParagraph("", 79, 0), "");
|
||||
|
||||
Reference in New Issue
Block a user