From 0617d6e02efa045e3ecd34cdef2fc470213510e1 Mon Sep 17 00:00:00 2001 From: Ed Hennis Date: Fri, 18 Nov 2022 18:04:39 -0500 Subject: [PATCH] Don't try to read SLE with key 0 from the ledger: * May resolve #4341 --- src/ripple/app/tx/impl/NFTokenAcceptOffer.cpp | 3 +++ src/test/app/NFToken_test.cpp | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/ripple/app/tx/impl/NFTokenAcceptOffer.cpp b/src/ripple/app/tx/impl/NFTokenAcceptOffer.cpp index fb5f51c7251..07fe9957a76 100644 --- a/src/ripple/app/tx/impl/NFTokenAcceptOffer.cpp +++ b/src/ripple/app/tx/impl/NFTokenAcceptOffer.cpp @@ -67,6 +67,9 @@ NFTokenAcceptOffer::preclaim(PreclaimContext const& ctx) -> std::pair, TER> { if (id) { + if (id->isZero()) + return {nullptr, tecOBJECT_NOT_FOUND}; + auto offerSLE = ctx.view.read(keylet::nftoffer(*id)); if (!offerSLE) diff --git a/src/test/app/NFToken_test.cpp b/src/test/app/NFToken_test.cpp index ac86bf74988..2fb27f8a352 100644 --- a/src/test/app/NFToken_test.cpp +++ b/src/test/app/NFToken_test.cpp @@ -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));