diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-04-13 18:25:33 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-04-13 18:25:33 +0200 |
commit | 278e83863b2c7329f6712b8809e4aa5e6a50e13f (patch) | |
tree | 8522f698730046d662834c5370a18d7060d62a02 | |
parent | df1956075d9ff7b5869fb548734bc2a7be2bce44 (diff) |
patch 8.2.0573: using :version twice leaks memoryv8.2.0573
Problem: using :version twice leaks memory
Solution: Only initialize variables once. (Dominique Pelle, closes #5917)
-rw-r--r-- | src/globals.h | 2 | ||||
-rw-r--r-- | src/testdir/Make_all.mak | 1 | ||||
-rw-r--r-- | src/testdir/test_alot.vim | 1 | ||||
-rw-r--r-- | src/testdir/test_version.vim | 10 | ||||
-rw-r--r-- | src/version.c | 29 |
5 files changed, 30 insertions, 13 deletions
diff --git a/src/globals.h b/src/globals.h index 199a0c5e7a..b474aa8bc3 100644 --- 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 /* diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak index 63d97e862b..db74f05a3f 100644 --- 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 \ diff --git a/src/testdir/test_alot.vim b/src/testdir/test_alot.vim index 375213c8a0..83f2c1923c 100644 --- 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 diff --git a/src/testdir/test_version.vim b/src/testdir/test_version.vim new file mode 100644 index 0000000000..2f66f50259 --- /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 diff --git a/src/version.c b/src/version.c index c5b7c8b99a..f59a309236 100644 --- 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); - - 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); + { + 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); + } } # endif #else @@ -739,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 573, +/**/ 572, /**/ 571, |