From 1be5b375c4446976eb5a0a90d2cfa1d2d289a6ed Mon Sep 17 00:00:00 2001 From: John Marriott Date: Mon, 23 Jun 2025 19:57:29 +0200 Subject: [PATCH] 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 Signed-off-by: Christian Brabandt --- src/cmdexpand.c | 14 ++++++++------ src/version.c | 2 ++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/cmdexpand.c b/src/cmdexpand.c index a6d8c8539b..4077fb3416 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 f8dc4084b6..df89e19d6c 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, /**/