Commit: patch 9.1.1476: missing out-of-memory checks in cmdexpand.c

0 views
Skip to first unread message

Christian Brabandt

unread,
Jun 23, 2025, 2:15:18 PM6/23/25
to vim...@googlegroups.com
patch 9.1.1476: missing out-of-memory checks in cmdexpand.c

Commit: https://github.com/vim/vim/commit/1be5b375c4446976eb5a0a90d2cfa1d2d289a6ed
Author: John Marriott <basi...@internode.on.net>
Date: Mon Jun 23 19:57:29 2025 +0200

patch 9.1.1476: missing out-of-memory checks in cmdexpand.c

Problem: missing out-of-memory checks in cmdexpand.c
Solution: add missing out-of-memory checks, re-order code
(John Marriott)

This commit does the following:
- in cmdline_pum_create() add out-of-memory check call of ALLOC_MULT()
- in expand_cmdline() move check for out-of-memory to cover both
assignments of file_str
- in nextwild() don't free `p2` until after it's last use.

closes: #17592

Signed-off-by: John Marriott <basi...@internode.on.net>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index a6d8c8539..4077fb341 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -335,7 +335,6 @@ nextwild(
ccline->cmdpos += difflen;
}
}
- vim_free(p2);

redrawcmd();
cursorcmd();
@@ -351,6 +350,8 @@ nextwild(
// free expanded pattern
(void)ExpandOne(xp, NULL, NULL, 0, WILD_FREE);

+ vim_free(p2);
+
return OK;
}

@@ -370,8 +371,11 @@ cmdline_pum_create(
int columns;

// Add all the completion matches
+ compl_match_array = ALLOC_MULT(pumitem_T, numMatches);
+ if (compl_match_array == NULL)
+ return EXPAND_UNSUCCESSFUL;
+
compl_match_arraysize = numMatches;
- compl_match_array = ALLOC_MULT(pumitem_T, compl_match_arraysize);
for (i = 0; i < numMatches; i++)
{
compl_match_array[i].pum_text = SHOW_MATCH(i);
@@ -2884,11 +2888,9 @@ expand_cmdline(
// If fuzzy matching, don't modify the search string
file_str = vim_strsave(xp->xp_pattern);
else
- {
file_str = addstar(xp->xp_pattern, xp->xp_pattern_len, xp->xp_context);
- if (file_str == NULL)
- return EXPAND_UNSUCCESSFUL;
- }
+ if (file_str == NULL)
+ return EXPAND_UNSUCCESSFUL;

if (p_wic)
options += WILD_ICASE;
diff --git a/src/version.c b/src/version.c
index f8dc4084b..df89e19d6 100644
--- a/src/version.c
+++ b/src/version.c
@@ -709,6 +709,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1476,
/**/
1475,
/**/
Reply all
Reply to author
Forward
0 new messages