Merge pull request #5481

6484930 Apply AreSane() checks to the fees from the network. (Gregory Maxwell)
This commit is contained in:
Wladimir J. van der Laan 2014-12-23 12:28:20 +01:00
commit 055f3ae9aa
No known key found for this signature in database
GPG Key ID: 74810B012346C9A6

View File

@ -91,22 +91,32 @@ public:
* Used as belt-and-suspenders check when reading to detect
* file corruption
*/
bool AreSane(const std::vector<CFeeRate>& vecFee, const CFeeRate& minRelayFee)
static bool AreSane(const CFeeRate fee, const CFeeRate& minRelayFee)
{
if (fee < CFeeRate(0))
return false;
if (fee.GetFeePerK() > minRelayFee.GetFeePerK() * 10000)
return false;
return true;
}
static bool AreSane(const std::vector<CFeeRate>& vecFee, const CFeeRate& minRelayFee)
{
BOOST_FOREACH(CFeeRate fee, vecFee)
{
if (fee < CFeeRate(0))
return false;
if (fee.GetFeePerK() > minRelayFee.GetFeePerK() * 10000)
if (!AreSane(fee, minRelayFee))
return false;
}
return true;
}
bool AreSane(const std::vector<double> vecPriority)
static bool AreSane(const double priority)
{
return priority >= 0;
}
static bool AreSane(const std::vector<double> vecPriority)
{
BOOST_FOREACH(double priority, vecPriority)
{
if (priority < 0)
if (!AreSane(priority))
return false;
}
return true;
@ -167,12 +177,12 @@ private:
bool sufficientFee = (feeRate > minRelayFee);
bool sufficientPriority = AllowFree(dPriority);
const char* assignedTo = "unassigned";
if (sufficientFee && !sufficientPriority)
if (sufficientFee && !sufficientPriority && CBlockAverage::AreSane(feeRate, minRelayFee))
{
history[nBlocksTruncated].RecordFee(feeRate);
assignedTo = "fee";
}
else if (sufficientPriority && !sufficientFee)
else if (sufficientPriority && !sufficientFee && CBlockAverage::AreSane(dPriority))
{
history[nBlocksTruncated].RecordPriority(dPriority);
assignedTo = "priority";