diff --git a/src/NetworkOPs.cpp b/src/NetworkOPs.cpp index dbeb8fd1d..088a717f2 100644 --- a/src/NetworkOPs.cpp +++ b/src/NetworkOPs.cpp @@ -88,17 +88,26 @@ Transaction::pointer NetworkOPs::submitTransaction(const Transaction::pointer& t tpTrans->getSTransaction()->add(s); Transaction::pointer tpTransNew = Transaction::sharedTransaction(s.getData(), true); - assert(tpTransNew); - if(!tpTransNew->getSTransaction()->isEquivalent(*tpTrans->getSTransaction())) + if (!tpTransNew) + { + // Could not construct transaction. + nothing(); + } + else if (tpTransNew->getSTransaction()->isEquivalent(*tpTrans->getSTransaction())) + { + (void) NetworkOPs::processTransaction(tpTransNew); + } + else { cLog(lsFATAL) << "Transaction reconstruction failure"; cLog(lsFATAL) << tpTransNew->getSTransaction()->getJson(0); cLog(lsFATAL) << tpTrans->getSTransaction()->getJson(0); - assert(false); - } - (void) NetworkOPs::processTransaction(tpTransNew); + assert(false); + + tpTransNew = Transaction::pointer(); + } return tpTransNew; } diff --git a/src/WSDoor.cpp b/src/WSDoor.cpp index 91b17e8aa..5d52859fb 100644 --- a/src/WSDoor.cpp +++ b/src/WSDoor.cpp @@ -1072,6 +1072,12 @@ void WSConnection::doSubmit(Json::Value& jvResult, const Json::Value& jvRequest) try { tpTrans = mNetwork.submitTransaction(tpTrans); + + if (!tpTrans) { + jvResult["error"] = "invalidTransaction"; + jvResult["error_exception"] = "Unable to sterilize transaction."; + return; + } } catch (std::exception& e) {