patch 8.2.0573: using :version twice leaks memory

Problem:    using :version twice leaks memory
Solution:   Only initialize variables once. (Dominique Pelle, closes #5917)
diff --git a/src/globals.h b/src/globals.h
index 199a0c5..b474aa8 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1258,7 +1258,7 @@
 #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 63d97e8..db74f05 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -285,6 +285,7 @@
 	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 375213c..83f2c19 100644
--- a/src/testdir/test_alot.vim
+++ b/src/testdir/test_alot.vim
@@ -32,4 +32,5 @@
 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 0000000..2f66f50
--- /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 c5b7c8b..f59a309 100644
--- a/src/version.c
+++ b/src/version.c
@@ -54,19 +54,22 @@
     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 int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    573,
+/**/
     572,
 /**/
     571,