Don't try to read SLE with key 0 from the ledger:

* May resolve #4341
This commit is contained in:
Ed Hennis
2022-11-18 18:04:39 -05:00
committed by Elliot Lee
parent 004ec2d201
commit b7ac73c8e4
2 changed files with 15 additions and 0 deletions

View File

@@ -67,6 +67,9 @@ NFTokenAcceptOffer::preclaim(PreclaimContext const& ctx)
-> std::pair<std::shared_ptr<const SLE>, TER> {
if (id)
{
if (id->isZero())
return {nullptr, tecOBJECT_NOT_FOUND};
auto offerSLE = ctx.view.read(keylet::nftoffer(*id));
if (!offerSLE)

View File

@@ -1130,6 +1130,12 @@ class NFToken_test : public beast::unit_test::suite
//----------------------------------------------------------------------
// preclaim
// The buy offer must be non-zero.
env(token::acceptBuyOffer(buyer, beast::zero),
ter(tecOBJECT_NOT_FOUND));
env.close();
BEAST_EXPECT(ownerCount(env, buyer) == 0);
// The buy offer must be present in the ledger.
uint256 const missingOfferIndex = keylet::nftoffer(alice, 1).key;
env(token::acceptBuyOffer(buyer, missingOfferIndex),
@@ -1142,6 +1148,12 @@ class NFToken_test : public beast::unit_test::suite
env.close();
BEAST_EXPECT(ownerCount(env, buyer) == 0);
// The sell offer must be non-zero.
env(token::acceptSellOffer(buyer, beast::zero),
ter(tecOBJECT_NOT_FOUND));
env.close();
BEAST_EXPECT(ownerCount(env, buyer) == 0);
// The sell offer must be present in the ledger.
env(token::acceptSellOffer(buyer, missingOfferIndex),
ter(tecOBJECT_NOT_FOUND));