From 71a43c01377cb0c5cdc5f2d9a357b5ef1aa69ee3 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sun, 11 Feb 2018 15:20:20 +0100 Subject: [PATCH] patch 8.0.1502: in out-of-memory situation character is not restored Problem: In out-of-memory situation character is not restored. (Coverity) Solution: Restore the character in all situations. --- src/ex_getln.c | 25 +++++++++++-------------- src/version.c | 2 ++ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/ex_getln.c b/src/ex_getln.c index a9d6bd483..f92f1dfed 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -5315,8 +5315,9 @@ ExpandUserDefined( char_u *retstr; char_u *s; char_u *e; - char_u keep; + int keep; garray_T ga; + int skip; retstr = call_user_expand_func(call_func_retstr, xp, num_file, file); if (retstr == NULL) @@ -5329,23 +5330,19 @@ ExpandUserDefined( if (e == NULL) e = s + STRLEN(s); keep = *e; - *e = 0; + *e = NUL; - if (xp->xp_pattern[0] && vim_regexec(regmatch, s, (colnr_T)0) == 0) + skip = xp->xp_pattern[0] && vim_regexec(regmatch, s, (colnr_T)0) == 0; + *e = keep; + + if (!skip) { - *e = keep; - if (*e != NUL) - ++e; - continue; + if (ga_grow(&ga, 1) == FAIL) + break; + ((char_u **)ga.ga_data)[ga.ga_len] = vim_strnsave(s, (int)(e - s)); + ++ga.ga_len; } - if (ga_grow(&ga, 1) == FAIL) - break; - - ((char_u **)ga.ga_data)[ga.ga_len] = vim_strnsave(s, (int)(e - s)); - ++ga.ga_len; - - *e = keep; if (*e != NUL) ++e; } diff --git a/src/version.c b/src/version.c index d96f896ee..62fd9edce 100644 --- a/src/version.c +++ b/src/version.c @@ -771,6 +771,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1502, /**/ 1501, /**/ -- 2.50.1