From 663c1bda0e461e8cfe955d8027d41e252c70f925 Mon Sep 17 00:00:00 2001 From: Richard Holland Date: Tue, 7 Mar 2023 07:54:40 +0000 Subject: [PATCH] fix for #35 --- src/ripple/app/tx/impl/SetHook.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/ripple/app/tx/impl/SetHook.cpp b/src/ripple/app/tx/impl/SetHook.cpp index 1759074de..bfc07f931 100644 --- a/src/ripple/app/tx/impl/SetHook.cpp +++ b/src/ripple/app/tx/impl/SetHook.cpp @@ -910,8 +910,23 @@ bool reduceReferenceCount(std::shared_ptr& sle) void incrementReferenceCount(std::shared_ptr& sle) { - if (sle && sle->isFieldPresent(sfReferenceCount)) - sle->setFieldU64(sfReferenceCount, sle->getFieldU64(sfReferenceCount) + 1); + if (!sle) + return; + + uint64_t rc = + sle->isFieldPresent(sfReferenceCount) + ? sle->getFieldU64(sfReferenceCount) + 1 + : 1; + + if (rc == 0) + { + // overflow should be impossible... + // it would require ~ 4.6*10^18 accounts each pointing all four hook entries at one hook definition + // handle this somewhat gracefully anyway if it somehow did happen + return; + } + + sle->setFieldU64(sfReferenceCount, rc); } TER