diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index 27136b476..185e4fedb 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -244,8 +244,8 @@ TER OfferCreateTransactor::takeOffers( TER OfferCreateTransactor::doApply() { Log(lsWARNING) << "doOfferCreate> " << mTxn.getJson(0); - const uint32 txFlags = mTxn.getFlags(); - const bool bPassive = isSetBit(txFlags, tfPassive); + const uint32 uTxFlags = mTxn.getFlags(); + const bool bPassive = isSetBit(uTxFlags, tfPassive); STAmount saTakerPays = mTxn.getFieldAmount(sfTakerPays); STAmount saTakerGets = mTxn.getFieldAmount(sfTakerGets); @@ -273,7 +273,13 @@ TER OfferCreateTransactor::doApply() uint64 uOwnerNode; uint64 uBookNode; - if (bHaveExpiration && !uExpiration) + if (uTxFlags & tfOfferCreateMask) + { + Log(lsINFO) << "doOfferCreate: Malformed transaction: Invalid flags set."; + + return temINVALID_FLAG; + } + else if (bHaveExpiration && !uExpiration) { Log(lsWARNING) << "doOfferCreate: Malformed offer: bad expiration"; diff --git a/src/cpp/ripple/TransactionFormats.h b/src/cpp/ripple/TransactionFormats.h index ec0f4f887..091978ba1 100644 --- a/src/cpp/ripple/TransactionFormats.h +++ b/src/cpp/ripple/TransactionFormats.h @@ -56,6 +56,7 @@ const int TransactionMaxLen = 1048576; // OfferCreate flags: const uint32 tfPassive = 0x00010000; +const uint32 tfOfferCreateMask = ~(tfPassive); // Payment flags: const uint32 tfCreateAccount = 0x00010000;