{
if (bufno >= buf_list_size) // grow list
{
- nbbuf_T *t_buf_list = buf_list;
+ nbbuf_T *t_buf_list = buf_list;
+ size_t bufsize;
incr = bufno - buf_list_size + 90;
buf_list_size += incr;
- buf_list = vim_realloc(buf_list, buf_list_size * sizeof(nbbuf_T));
+ bufsize = buf_list_size * sizeof(nbbuf_T);
+ if (bufsize == 0 || bufsize / sizeof(nbbuf_T)
+ != (size_t)buf_list_size)
+ {
+ // list size overflow, bail out
+ return NULL;
+ }
+ buf_list = vim_realloc(buf_list, bufsize);
if (buf_list == NULL)
{
vim_free(t_buf_list);