Mercurial > vim
changeset 20035:4c9acbd6b3c7 v8.2.0573
patch 8.2.0573: using :version twice leaks memory
Commit: https://github.com/vim/vim/commit/278e83863b2c7329f6712b8809e4aa5e6a50e13f
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Apr 13 18:25:33 2020 +0200
patch 8.2.0573: using :version twice leaks memory
Problem: using :version twice leaks memory
Solution: Only initialize variables once. (Dominique Pelle, closes https://github.com/vim/vim/issues/5917)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 13 Apr 2020 18:30:08 +0200 |
parents | 1098dd529613 |
children | d34b41f253f9 |
files | src/globals.h src/testdir/Make_all.mak src/testdir/test_alot.vim src/testdir/test_version.vim src/version.c |
diffstat | 5 files changed, 30 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/globals.h +++ b/src/globals.h @@ -1258,7 +1258,7 @@ extern char *Version; #if defined(HAVE_DATE_TIME) && defined(VMS) && defined(VAXC) extern char longVersion[]; #else -EXTERN char *longVersion; +EXTERN char *longVersion INIT(= NULL); #endif /*
--- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -285,6 +285,7 @@ NEW_TESTS = \ test_utf8 \ test_utf8_comparisons \ test_vartabs \ + test_version \ $(TEST_VIM9) \ test_viminfo \ test_vimscript \
--- a/src/testdir/test_alot.vim +++ b/src/testdir/test_alot.vim @@ -32,4 +32,5 @@ source test_tabline.vim source test_tagcase.vim source test_tagfunc.vim source test_unlet.vim +source test_version.vim source test_wnext.vim
new file mode 100644 --- /dev/null +++ b/src/testdir/test_version.vim @@ -0,0 +1,10 @@ +" Test :version Ex command + +func Test_version() + " version should always return the same string. + let v1 = execute('version') + let v2 = execute('version') + call assert_equal(v1, v2) + + call assert_match("^\n\nVIM - Vi IMproved .*", v1) +endfunc
--- a/src/version.c +++ b/src/version.c @@ -54,19 +54,22 @@ init_longVersion(void) void init_longVersion(void) { - char *date_time = __DATE__ " " __TIME__; - char *msg = _("%s (%s, compiled %s)"); - size_t len = strlen(msg) - + strlen(VIM_VERSION_LONG_ONLY) - + strlen(VIM_VERSION_DATE_ONLY) - + strlen(date_time); + if (longVersion == NULL) + { + char *date_time = __DATE__ " " __TIME__; + char *msg = _("%s (%s, compiled %s)"); + size_t len = strlen(msg) + + strlen(VIM_VERSION_LONG_ONLY) + + strlen(VIM_VERSION_DATE_ONLY) + + strlen(date_time); - longVersion = alloc(len); - if (longVersion == NULL) - longVersion = VIM_VERSION_LONG; - else - vim_snprintf(longVersion, len, msg, - VIM_VERSION_LONG_ONLY, VIM_VERSION_DATE_ONLY, date_time); + longVersion = alloc(len); + if (longVersion == NULL) + longVersion = VIM_VERSION_LONG; + else + vim_snprintf(longVersion, len, msg, + VIM_VERSION_LONG_ONLY, VIM_VERSION_DATE_ONLY, date_time); + } } # endif #else @@ -739,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 573, +/**/ 572, /**/ 571,