summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-04-13 18:25:33 +0200
committerBram Moolenaar <Bram@vim.org>2020-04-13 18:25:33 +0200
commit278e83863b2c7329f6712b8809e4aa5e6a50e13f (patch)
tree8522f698730046d662834c5370a18d7060d62a02
parentdf1956075d9ff7b5869fb548734bc2a7be2bce44 (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.h2
-rw-r--r--src/testdir/Make_all.mak1
-rw-r--r--src/testdir/test_alot.vim1
-rw-r--r--src/testdir/test_version.vim10
-rw-r--r--src/version.c29
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,