Fix the flag processing of NFTokenModify (#5246)

Adds checks for invalid flags.
This commit is contained in:
tequ
2025-01-17 00:37:52 +09:00
committed by GitHub
parent ff8b9aa439
commit 9e4a7d5871
3 changed files with 23 additions and 2 deletions

View File

@@ -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;

View File

@@ -7799,6 +7799,11 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite
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;

View File

@@ -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;