diff --git a/src/main.cpp b/src/main.cpp index 5f98d49530e..ff4e2f0ded8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1502,6 +1502,16 @@ bool CBlock::CheckBlock() const if (uniqueTx.size() != vtx.size()) return DoS(100, error("CheckBlock() : duplicate transaction")); + // 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 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")); diff --git a/src/serialize.h b/src/serialize.h index 346594c86a4..6bdf3782294 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -1245,8 +1245,6 @@ public: int nType; int nVersion; - typedef FILE element_type; - CAutoFile(FILE* filenew=NULL, int nTypeIn=SER_DISK, int nVersionIn=VERSION) { file = filenew; diff --git a/src/util.cpp b/src/util.cpp index 211d1a036f3..66161c7e5a6 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -236,7 +236,7 @@ inline int OutputDebugStringF(const char* pszFormat, ...) *pend = '\0'; char* p1 = pszBuffer; char* p2; - while (p2 = strchr(p1, '\n')) + while ((p2 = strchr(p1, '\n'))) { p2++; char c = *p2; diff --git a/src/wallet.h b/src/wallet.h index 86c8bc818c6..90ee518ae44 100644 --- a/src/wallet.h +++ b/src/wallet.h @@ -175,7 +175,6 @@ public: } int LoadWallet(bool& fFirstRunRet); -// bool BackupWallet(const std::string& strDest); bool SetAddressBookName(const CBitcoinAddress& address, const std::string& strName);