Skip to content

Commit

Permalink
refactor: improve checking of path lengths (XRPLF#4519)
Browse files Browse the repository at this point in the history
Improve the checking of the path lengths during Payments. Previously,
the code that did the check of the payment path lengths was sometimes
executed, but without any effect. This changes it to only check when it
matters, and to not make unnecessary copies of the path vectors.

Signed-off-by: Manoj Doshi <[email protected]>
  • Loading branch information
a-noni-mousse authored and manojsdoshi committed Aug 19, 2023
1 parent d17eed9 commit dd72af1
Showing 1 changed file with 9 additions and 22 deletions.
31 changes: 9 additions & 22 deletions src/ripple/app/tx/impl/Payment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -270,27 +270,17 @@ Payment::preclaim(PreclaimContext const& ctx)
return tecDST_TAG_NEEDED;
}

if (paths || sendMax || !saDstAmount.native())
// Payment with at least one intermediate step and uses transitive balances.
if ((paths || sendMax || !saDstAmount.native()) && ctx.view.open())
{
// Ripple payment with at least one intermediate step and uses
// transitive balances.

// Copy paths into an editable class.
STPathSet const spsPaths = ctx.tx.getFieldPathSet(sfPaths);
STPathSet const& paths = ctx.tx.getFieldPathSet(sfPaths);

auto pathTooBig = spsPaths.size() > MaxPathSize;

if (!pathTooBig)
for (auto const& path : spsPaths)
if (path.size() > MaxPathLength)
{
pathTooBig = true;
break;
}

if (ctx.view.open() && pathTooBig)
if (paths.size() > MaxPathSize ||
std::any_of(paths.begin(), paths.end(), [](STPath const& path) {
return path.size() > MaxPathLength;
}))
{
return telBAD_PATH_COUNT; // Too many paths for proposed ledger.
return telBAD_PATH_COUNT;
}
}

Expand Down Expand Up @@ -384,9 +374,6 @@ Payment::doApply()
}
}

// Copy paths into an editable class.
STPathSet spsPaths = ctx_.tx.getFieldPathSet(sfPaths);

path::RippleCalc::Input rcInput;
rcInput.partialPaymentAllowed = partialPaymentAllowed;
rcInput.defaultPathsAllowed = defaultPathsAllowed;
Expand All @@ -404,7 +391,7 @@ Payment::doApply()
saDstAmount,
uDstAccountID,
account_,
spsPaths,
ctx_.tx.getFieldPathSet(sfPaths),
ctx_.app.logs(),
&rcInput);
// VFALCO NOTE We might not need to apply, depending
Expand Down

0 comments on commit dd72af1

Please sign in to comment.