patch 8.2.4255: theoretical computation overflow
Problem: Theoretical computation overflow.
Solution: Perform multiplication in a wider type. (closes #9657)
diff --git a/src/alloc.c b/src/alloc.c
index 47a099f..19f8fcd 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -737,11 +737,11 @@
if (n < gap->ga_len / 2)
n = gap->ga_len / 2;
- new_len = gap->ga_itemsize * (gap->ga_len + n);
+ new_len = (size_t)gap->ga_itemsize * (gap->ga_len + n);
pp = vim_realloc(gap->ga_data, new_len);
if (pp == NULL)
return FAIL;
- old_len = gap->ga_itemsize * gap->ga_maxlen;
+ old_len = (size_t)gap->ga_itemsize * gap->ga_maxlen;
vim_memset(pp + old_len, 0, new_len - old_len);
gap->ga_maxlen = gap->ga_len + n;
gap->ga_data = pp;