Skip to content

Commit e4c3d1e

Browse files
committed
Use saturating add in IWP constructors
In order to avoid panics during weight prediction replace addition with `u32::saturating_add()`.
1 parent 8552534 commit e4c3d1e

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

bitcoin/src/blockdata/transaction.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,8 +1085,9 @@ impl InputWeightPrediction {
10851085
(0usize, 0u32),
10861086
|(count, total_size), elem_len| {
10871087
let elem_len = *elem_len.borrow();
1088-
let elem_size = Self::saturate_to_u32(elem_len) + Self::encoded_size(elem_len);
1089-
(count + 1, total_size + elem_size)
1088+
let elem_size =
1089+
Self::saturate_to_u32(elem_len).saturating_add(Self::encoded_size(elem_len));
1090+
(count + 1, total_size.saturating_add(elem_size))
10901091
},
10911092
);
10921093
let witness_size = if count > 0 { total_size + Self::encoded_size(count) } else { 0 };
@@ -1103,21 +1104,22 @@ impl InputWeightPrediction {
11031104
/// `new` and thus is intended to be only used in `const` context.
11041105
pub const fn from_slice(input_script_len: usize, witness_element_lengths: &[usize]) -> Self {
11051106
let mut i = 0;
1106-
let mut total_size = 0;
1107+
let mut total_size: u32 = 0;
11071108
// for loops not supported in const fn
11081109
while i < witness_element_lengths.len() {
11091110
let elem_len = witness_element_lengths[i];
1110-
let elem_size = Self::saturate_to_u32(elem_len) + Self::encoded_size(elem_len);
1111-
total_size += elem_size;
1111+
let elem_size =
1112+
Self::saturate_to_u32(elem_len).saturating_add(Self::encoded_size(elem_len));
1113+
total_size = total_size.saturating_add(elem_size);
11121114
i += 1;
11131115
}
11141116
let witness_size = if !witness_element_lengths.is_empty() {
1115-
total_size + Self::encoded_size(witness_element_lengths.len())
1117+
total_size.saturating_add(Self::encoded_size(witness_element_lengths.len()))
11161118
} else {
11171119
0
11181120
};
1119-
let script_size =
1120-
Self::saturate_to_u32(input_script_len) + Self::encoded_size(input_script_len);
1121+
let script_size = Self::saturate_to_u32(input_script_len)
1122+
.saturating_add(Self::encoded_size(input_script_len));
11211123

11221124
InputWeightPrediction { script_size, witness_size }
11231125
}

0 commit comments

Comments
 (0)