Skip to content

Commit 2c63982

Browse files
committed
fixes an elusive optional dereference
1 parent 733bb00 commit 2c63982

File tree

2 files changed

+43
-42
lines changed

2 files changed

+43
-42
lines changed

src/xrpld/app/tx/detail/InvariantCheck.cpp

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3467,23 +3467,42 @@ ValidVault::finalize(
34673467
}
34683468

34693469
auto const vaultDeltaAssets = deltaAssets(afterVault.pseudoId);
3470+
if (vaultDeltaAssets)
3471+
{
3472+
if (*vaultDeltaAssets >= zero)
3473+
{
3474+
JLOG(j.fatal()) << //
3475+
"Invariant failed: clawback must decrease vault "
3476+
"balance";
3477+
result = false;
3478+
}
3479+
3480+
if (beforeVault.assetsTotal + *vaultDeltaAssets !=
3481+
afterVault.assetsTotal)
3482+
{
3483+
JLOG(j.fatal()) << //
3484+
"Invariant failed: clawback and assets outstanding "
3485+
"must add up";
3486+
result = false;
3487+
}
34703488

3471-
if (!vaultDeltaAssets && !vaultHoldsNoAssets(beforeVault))
3489+
if (beforeVault.assetsAvailable + *vaultDeltaAssets !=
3490+
afterVault.assetsAvailable)
3491+
{
3492+
JLOG(j.fatal()) << //
3493+
"Invariant failed: clawback and assets available "
3494+
"must "
3495+
"add up";
3496+
result = false;
3497+
}
3498+
}
3499+
else if (!vaultHoldsNoAssets(beforeVault))
34723500
{
34733501
JLOG(j.fatal()) << //
34743502
"Invariant failed: clawback must change vault balance";
34753503
return false; // That's all we can do
34763504
}
34773505

3478-
if (*vaultDeltaAssets >= zero &&
3479-
!vaultHoldsNoAssets(beforeVault))
3480-
{
3481-
JLOG(j.fatal()) << //
3482-
"Invariant failed: clawback must decrease vault "
3483-
"balance";
3484-
result = false;
3485-
}
3486-
34873506
auto const accountDeltaShares = deltaShares(tx[sfHolder]);
34883507
if (!accountDeltaShares)
34893508
{
@@ -3516,26 +3535,6 @@ ValidVault::finalize(
35163535
result = false;
35173536
}
35183537

3519-
if (!vaultHoldsNoAssets(beforeVault) &&
3520-
beforeVault.assetsTotal + *vaultDeltaAssets !=
3521-
afterVault.assetsTotal)
3522-
{
3523-
JLOG(j.fatal()) << //
3524-
"Invariant failed: clawback and assets outstanding "
3525-
"must add up";
3526-
result = false;
3527-
}
3528-
3529-
if (!vaultHoldsNoAssets(beforeVault) &&
3530-
beforeVault.assetsAvailable + *vaultDeltaAssets !=
3531-
afterVault.assetsAvailable)
3532-
{
3533-
JLOG(j.fatal()) << //
3534-
"Invariant failed: clawback and assets available must "
3535-
"add up";
3536-
result = false;
3537-
}
3538-
35393538
return result;
35403539
}
35413540

src/xrpld/app/tx/detail/VaultClawback.cpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,20 @@ VaultClawback::preclaim(PreclaimContext const& ctx)
8989
if (sharesTotal > 0 && assetsTotal == 0 && assetsAvailable == 0 &&
9090
account == owner)
9191
{
92-
Number const sharesHeld = accountHolds(
93-
ctx.view,
94-
holder,
95-
share,
96-
FreezeHandling::fhIGNORE_FREEZE,
97-
AuthHandling::ahIGNORE_AUTH,
98-
ctx.j);
99-
100-
// The VaultOwner must burn all shares
101-
if (std::optional<Number> const amount = ctx.tx[~sfAmount];
102-
amount && *amount != sharesHeld)
103-
return tecLIMIT_EXCEEDED;
92+
if (auto const amount = ctx.tx[~sfAmount]; amount)
93+
{
94+
Number const sharesHeld = accountHolds(
95+
ctx.view,
96+
holder,
97+
share,
98+
FreezeHandling::fhIGNORE_FREEZE,
99+
AuthHandling::ahIGNORE_AUTH,
100+
ctx.j);
101+
102+
// The VaultOwner must burn all shares
103+
if (*amount != sharesHeld)
104+
return tecLIMIT_EXCEEDED;
105+
}
104106

105107
return tesSUCCESS;
106108
}

0 commit comments

Comments
 (0)