]> granicus.if.org Git - vim/commitdiff
patch 8.2.0573: using :version twice leaks memory v8.2.0573
authorBram Moolenaar <Bram@vim.org>
Mon, 13 Apr 2020 16:25:33 +0000 (18:25 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 13 Apr 2020 16:25:33 +0000 (18:25 +0200)
Problem:    using :version twice leaks memory
Solution:   Only initialize variables once. (Dominique Pelle, closes #5917)

src/globals.h
src/testdir/Make_all.mak
src/testdir/test_alot.vim
src/testdir/test_version.vim [new file with mode: 0644]
src/version.c

index 199a0c5e7ab53021e8f6f6aacbf0941586c17901..b474aa8bc3134c2f40c22ca5d0a7f901da7d6be4 100644 (file)
@@ -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
 
 /*
index 63d97e862b132af5566e5d513ad1d4323df2c76a..db74f05a3f0bc550326a91ec372ac34b6d976cf5 100644 (file)
@@ -285,6 +285,7 @@ NEW_TESTS = \
        test_utf8 \
        test_utf8_comparisons \
        test_vartabs \
+       test_version \
        $(TEST_VIM9) \
        test_viminfo \
        test_vimscript \
index 375213c8a0e77b4066be0441782bc2001b52ad8b..83f2c1923c1300614a2b4455bc293eb7eea1329f 100644 (file)
@@ -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 (file)
index 0000000..2f66f50
--- /dev/null
@@ -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
index c5b7c8b99ad0d36ca8627ded529964e2f3e08f60..f59a309236dc6ded8e893ece131c88e6ce8342dc 100644 (file)
@@ -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
@@ -738,6 +741,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    573,
 /**/
     572,
 /**/