X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fmain.cpp;h=5f98d49530ea5a45caee632d21698573b53ef745;hb=6a89317f621692e7d5c0c67b3a1440bf1b52b328;hp=d72a131a5f598d1cbfebad3bd95c36151226e92b;hpb=6789e99e4f70b9e779598f1a31552a87b5bd9360;p=novacoin.git diff --git a/src/main.cpp b/src/main.cpp index d72a131..5f98d49 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1492,6 +1492,16 @@ bool CBlock::CheckBlock() const if (!tx.CheckTransaction()) return DoS(tx.nDoS, error("CheckBlock() : CheckTransaction failed")); + // Check for duplicate txids. This is caught by ConnectInputs(), + // but catching it earlier avoids a potential DoS attack: + set uniqueTx; + BOOST_FOREACH(const CTransaction& tx, vtx) + { + uniqueTx.insert(tx.GetHash()); + } + if (uniqueTx.size() != vtx.size()) + return DoS(100, error("CheckBlock() : duplicate transaction")); + // Check that it's not full of nonstandard transactions if (GetSigOpCount() > MAX_BLOCK_SIGOPS) return DoS(100, error("CheckBlock() : out-of-bounds SigOpCount"));