mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-19 18:45:52 +00:00
Fix the flag processing of NFTokenModify (#5246)
Adds checks for invalid flags.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user