From 1d4cb0c9435fd77cb2a662669e7cf6291f18747f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 12 Mar 2013 09:48:35 -0700 Subject: [PATCH] Missing validity check. --- src/cpp/ripple/Ledger.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 713d4828c..484c4e617 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -1307,20 +1307,34 @@ bool Ledger::isValidBook(const uint160& uTakerPaysCurrency, const uint160& uTake { if (uTakerPaysCurrency.isZero()) { // XRP in + if (uTakerPaysIssuerID.isNonZero()) // XRP cannot have an issuer return false; + if (uTakerGetsCurrency.isZero()) // XRP to XRP not allowed return false; + if (uTakerGetsIssuerID.isZero()) // non-XRP must have issuer return false; + return true; } // non-XRP in if (uTakerPaysIssuerID.isZero()) // non-XRP must have issuer return false; - if (uTakerGetsCurrency.isZero() != uTakerGetsIssuerID.isZero()) - return false; // XRP must have issuer, non-XRP must not + + if (uTakerGetsCurrency.isZero()) // non-XRP to XRP + { + if (uTakerGetsIssuerID.isNonZero()) // XRP cannot have issuer + return false; + } + else // non-XRP to non-XRP + { + if ((uTakerPaysCurrency == uTakerGetsCurrency) && (uTakerGetsIssuerID == uTakerGetsIssuerID)) + return false; // Input and output cannot be identical + } + return true; }