[#1420] Synchronizer.proposeShielding crashes when there are insufficient funds to shield

- Check for the null value of the pointer when constructing propose shielding

[#1420] Synchronizer.proposeShielding crashes when there are insufficient funds to shield

- throw an error instead of returning nil value

[#1420] Synchronizer.proposeShielding crashes when there are insufficient funds to shield

- Changelog updated
- Error message polished a bit

[#1420] Synchronizer.proposeShielding crashes when there are insufficien… …t funds to shield  - Check for the null value of the pointer when constructing propose shielding  [#1420] Synchronizer.proposeShielding crashes when there are insufficient funds to shield  - throw an error instead of returning nil value  [#1420] Synchronizer.proposeShielding crashes when there are insufficient funds to shield (#1424)

- Refactored the error msg a bit
This commit is contained in:
Lukas Korba 2024-05-14 12:21:21 +02:00
parent 31a5848013
commit 95433fe8f0
2 changed files with 9 additions and 2 deletions

View File

@ -6,6 +6,9 @@ and this library adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
# Unreleased # Unreleased
## Fixed
- The backend method proposeShielding checks the pointer for a null value before attempting to construct the Data with it. Without this check, proposeShielding would crash when there were either zero funds to shield or when the amount was less than the threshold defined by the client.
# 2.1.5 - 2024-04-18 # 2.1.5 - 2024-04-18
## Changed ## Changed

View File

@ -752,11 +752,15 @@ struct ZcashRustBackend: ZcashRustBackendWelding {
) )
guard let proposal else { guard let proposal else {
throw ZcashError.rustShieldFunds(lastErrorMessage(fallback: "`proposeShielding` failed with unknown error")) throw ZcashError.rustShieldFunds(lastErrorMessage(fallback: "Failed with nil proposal."))
} }
defer { zcashlc_free_boxed_slice(proposal) } defer { zcashlc_free_boxed_slice(proposal) }
guard proposal.pointee.ptr != nil else {
throw ZcashError.rustShieldFunds(lastErrorMessage(fallback: "Failed with nil pointer."))
}
return try FfiProposal(contiguousBytes: Data( return try FfiProposal(contiguousBytes: Data(
bytes: proposal.pointee.ptr, bytes: proposal.pointee.ptr,
count: Int(proposal.pointee.len) count: Int(proposal.pointee.len)