fix: Check for empty or zero VaultID in LoanBrokerSet

- Resolves RIPD-4067.
This commit is contained in:
Ed Hennis
2025-11-10 15:32:32 -05:00
parent 1fa366576e
commit f3677c9bed
2 changed files with 23 additions and 0 deletions

View File

@@ -915,6 +915,17 @@ class LoanBroker_test : public beast::unit_test::suite
// test
env(jv, txflags(tfFullyCanonicalSig), ter(temINVALID));
};
auto testZeroVaultID = [&](auto&& getTxJv) {
auto jv = getTxJv();
// empty broker ID
jv[sfVaultID] = "";
env(jv, ter(temINVALID));
// zero broker ID
jv[sfVaultID] = to_string(uint256{});
// needs a flag to distinguish the parsed STTx from the prior
// test
env(jv, txflags(tfFullyCanonicalSig), ter(temINVALID));
};
if (brokerTest == CoverDeposit)
{
@@ -1058,6 +1069,12 @@ class LoanBroker_test : public beast::unit_test::suite
set(alice, vaultInfo.vaultID),
loanBrokerID(brokerKeylet.key));
});
// preflight: temINVALID (empty/zero vault id)
testZeroVaultID([&]() {
return env.json(
set(alice, vaultInfo.vaultID),
loanBrokerID(brokerKeylet.key));
});
if (asset.holds<Issue>())
{

View File

@@ -40,6 +40,12 @@ LoanBrokerSet::preflight(PreflightContext const& ctx)
return temINVALID;
}
if (auto const vaultID = tx.at(~sfVaultID))
{
if (*vaultID == beast::zero)
return temINVALID;
}
{
auto const minimumZero = tx[~sfCoverRateMinimum].value_or(0) == 0;
auto const liquidationZero =