diff --git a/src/NetworkOPs.cpp b/src/NetworkOPs.cpp index 9280ea83d2..e4d8b4af42 100644 --- a/src/NetworkOPs.cpp +++ b/src/NetworkOPs.cpp @@ -647,7 +647,6 @@ std::vector< std::pair > bool NetworkOPs::recvValidation(SerializedValidation::pointer val) { Log(lsINFO) << "recvValidation " << val->getLedgerHash().GetHex(); - return theApp->getValidations().addValidation(val); } diff --git a/src/Peer.cpp b/src/Peer.cpp index 6159f186f0..f4cbbcb0a9 100644 --- a/src/Peer.cpp +++ b/src/Peer.cpp @@ -735,15 +735,18 @@ void Peer::recvValidation(newcoin::TMValidation& packet) { Serializer s(packet.validation()); SerializerIterator sit(s); - SerializedValidation::pointer val = boost::make_shared(boost::ref(sit)); + SerializedValidation::pointer val = boost::make_shared(boost::ref(sit), false); + uint256 signingHash = val->getSigningHash(); if (!theApp->isNew(signingHash)) return; + if (!val->isValid(signingHash)) { punishPeer(PP_UNKNOWN_REQUEST); return; } + if (theApp->getOPs().recvValidation(val)) { PackedMessage::pointer message = boost::make_shared(packet, newcoin::mtVALIDATION); diff --git a/src/SerializedValidation.cpp b/src/SerializedValidation.cpp index b9d89e4f2a..71c11c831c 100644 --- a/src/SerializedValidation.cpp +++ b/src/SerializedValidation.cpp @@ -16,7 +16,7 @@ const uint32 SerializedValidation::sValidationMagic = 0x4c575200; // "LGR" SerializedValidation::SerializedValidation(SerializerIterator& sit, bool checkSignature) : STObject(sValidationFormat, sit), mSignature(sit, "Signature"), mTrusted(false) { - if (!isValid()) throw std::runtime_error("Invalid validation"); + if (checkSignature && !isValid()) throw std::runtime_error("Invalid validation"); } SerializedValidation::SerializedValidation(const uint256& ledgerHash, uint64 closeTime,