vim: Prevent overflowing integer when pushing count digit (#15079)

Minor bug where the command count overflows when enough digits are
entered. This swaps out simple multiplication/addition for their checked
counter parts, falling back to the previous value in case of overflow.

Release Notes:

- N/A
This commit is contained in:
Tom Anderson 2024-07-25 03:54:59 +10:00 committed by GitHub
parent d107d22c2d
commit 7fb906d774
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -491,11 +491,25 @@ impl Vim {
fn push_count_digit(&mut self, number: usize, cx: &mut WindowContext) {
if self.active_operator().is_some() {
self.update_state(|state| {
state.post_count = Some(state.post_count.unwrap_or(0) * 10 + number)
let post_count = state.post_count.unwrap_or(0);
state.post_count = Some(
post_count
.checked_mul(10)
.and_then(|post_count| post_count.checked_add(number))
.unwrap_or(post_count),
)
})
} else {
self.update_state(|state| {
state.pre_count = Some(state.pre_count.unwrap_or(0) * 10 + number)
let pre_count = state.pre_count.unwrap_or(0);
state.pre_count = Some(
pre_count
.checked_mul(10)
.and_then(|pre_count| pre_count.checked_add(number))
.unwrap_or(pre_count),
)
})
}
// update the keymap so that 0 works