diff --git a/include/xrpl/protocol/TxFlags.h b/include/xrpl/protocol/TxFlags.h index 9502db7e3ea..8d6ff09b763 100644 --- a/include/xrpl/protocol/TxFlags.h +++ b/include/xrpl/protocol/TxFlags.h @@ -189,7 +189,7 @@ constexpr std::uint32_t const tfNFTokenCreateOfferMask = ~(tfUniversal | tfSellNFToken); // NFTokenCancelOffer flags: -constexpr std::uint32_t const tfNFTokenCancelOfferMask = ~(tfUniversal); +constexpr std::uint32_t const tfNFTokenCancelOfferMask = ~tfUniversal; // NFTokenAcceptOffer flags: constexpr std::uint32_t const tfNFTokenAcceptOfferMask = ~tfUniversal; diff --git a/src/test/app/NFToken_test.cpp b/src/test/app/NFToken_test.cpp index 3460fef0a91..9afbfb7dba2 100644 --- a/src/test/app/NFToken_test.cpp +++ b/src/test/app/NFToken_test.cpp @@ -7793,12 +7793,17 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite env(token::mint(issuer, 0u), txflags(tfMutable)); env.close(); - // Set a negative fee. Exercises invalid preflight1. + // Set a negative fee. Exercises invalid preflight1. env(token::modify(issuer, nftId), fee(STAmount(10ull, true)), ter(temBAD_FEE)); env.close(); + // Invalid Flags + env(token::modify(issuer, nftId), + txflags(0x00000001), + ter(temINVALID_FLAG)); + // Invalid Owner env(token::modify(issuer, nftId), token::owner(issuer), @@ -7868,6 +7873,19 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite env.fund(XRP(10000), issuer, alice, bob); env.close(); + // modify with tfFullyCanonicalSig should success + uint256 const nftId{token::getNextID(env, issuer, 0u, tfMutable)}; + env(token::mint(issuer, 0u), txflags(tfMutable), token::uri("uri")); + env.close(); + + env(token::modify(issuer, nftId), txflags(tfFullyCanonicalSig)); + env.close(); + } + { + Env env{*this, features}; + env.fund(XRP(10000), issuer, alice, bob); + env.close(); + // lambda that returns the JSON form of NFTokens held by acct auto accountNFTs = [&env](Account const& acct) { Json::Value params; diff --git a/src/xrpld/app/tx/detail/NFTokenModify.cpp b/src/xrpld/app/tx/detail/NFTokenModify.cpp index 74ca1baef4f..7e616ea6ca0 100644 --- a/src/xrpld/app/tx/detail/NFTokenModify.cpp +++ b/src/xrpld/app/tx/detail/NFTokenModify.cpp @@ -37,6 +37,9 @@ NFTokenModify::preflight(PreflightContext const& ctx) if (NotTEC const ret = preflight1(ctx); !isTesSuccess(ret)) return ret; + if (ctx.tx.getFlags() & tfUniversalMask) + return temINVALID_FLAG; + if (auto owner = ctx.tx[~sfOwner]; owner == ctx.tx[sfAccount]) return temMALFORMED;