mirror of
https://github.com/mimblewimble/grin.git
synced 2025-02-08 04:11:08 +03:00
Fix small issues found by fuzzing (#1360)
Overage and fee come from the network and may cause overflow if a message was corrupted or crafted to attack a server.
This commit is contained in:
parent
e70ff53c3c
commit
37fa413329
2 changed files with 9 additions and 5 deletions
|
@ -30,6 +30,7 @@ pub enum Error {
|
||||||
Secp(secp::Error),
|
Secp(secp::Error),
|
||||||
/// Kernel sums do not equal output sums.
|
/// Kernel sums do not equal output sums.
|
||||||
KernelSumMismatch,
|
KernelSumMismatch,
|
||||||
|
InvalidValue,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<secp::Error> for Error {
|
impl From<secp::Error> for Error {
|
||||||
|
@ -89,7 +90,8 @@ pub trait Committed {
|
||||||
let over_commit = {
|
let over_commit = {
|
||||||
let secp = static_secp_instance();
|
let secp = static_secp_instance();
|
||||||
let secp = secp.lock().unwrap();
|
let secp = secp.lock().unwrap();
|
||||||
secp.commit_value(overage.abs() as u64).unwrap()
|
let overage_abs = overage.checked_abs().ok_or_else(|| Error::InvalidValue)? as u64;
|
||||||
|
secp.commit_value(overage_abs).unwrap()
|
||||||
};
|
};
|
||||||
if overage < 0 {
|
if overage < 0 {
|
||||||
input_commits.push(over_commit);
|
input_commits.push(over_commit);
|
||||||
|
|
|
@ -397,7 +397,9 @@ impl Transaction {
|
||||||
|
|
||||||
/// Total fee for a transaction is the sum of fees of all kernels.
|
/// Total fee for a transaction is the sum of fees of all kernels.
|
||||||
pub fn fee(&self) -> u64 {
|
pub fn fee(&self) -> u64 {
|
||||||
self.kernels.iter().fold(0, |acc, ref x| acc + x.fee)
|
self.kernels
|
||||||
|
.iter()
|
||||||
|
.fold(0, |acc, ref x| acc.saturating_add(x.fee))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn overage(&self) -> i64 {
|
fn overage(&self) -> i64 {
|
||||||
|
@ -994,9 +996,9 @@ mod test {
|
||||||
commit: commit,
|
commit: commit,
|
||||||
};
|
};
|
||||||
|
|
||||||
let block_hash = Hash::from_hex(
|
let block_hash =
|
||||||
"3a42e66e46dd7633b57d1f921780a1ac715e6b93c19ee52ab714178eb3a9f673",
|
Hash::from_hex("3a42e66e46dd7633b57d1f921780a1ac715e6b93c19ee52ab714178eb3a9f673")
|
||||||
).unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let nonce = 0;
|
let nonce = 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue