diff options
-rw-r--r-- | src/test/util_tests.cpp | 6 | ||||
-rw-r--r-- | src/util/moneystr.cpp | 4 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp index f86e713676..536ff3ba25 100644 --- a/src/test/util_tests.cpp +++ b/src/test/util_tests.cpp @@ -1199,6 +1199,12 @@ BOOST_AUTO_TEST_CASE(util_ParseMoney) BOOST_CHECK(ParseMoney("0.00000001", ret)); BOOST_CHECK_EQUAL(ret, COIN/100000000); + // Parsing amount that can not be represented in ret should fail + BOOST_CHECK(!ParseMoney("0.000000001", ret)); + + // Parsing empty string should fail + BOOST_CHECK(!ParseMoney("", ret)); + // Attempted 63 bit overflow should fail BOOST_CHECK(!ParseMoney("92233720368.54775808", ret)); diff --git a/src/util/moneystr.cpp b/src/util/moneystr.cpp index 981cb1b267..40d8918dfc 100644 --- a/src/util/moneystr.cpp +++ b/src/util/moneystr.cpp @@ -37,6 +37,10 @@ bool ParseMoney(const std::string& str, CAmount& nRet) return false; } + if (str.empty()) { + return false; + } + std::string strWhole; int64_t nUnits = 0; const char* p = str.c_str(); |