changeset 6671:476a12a96bb1 v7.4.660

updated for version 7.4.660 Problem: Using freed memory when g:colors_name is changed in the colors script. (oni-link) Solution: Make a copy of the variable value.
author Bram Moolenaar <bram@vim.org>
date Fri, 13 Mar 2015 12:53:37 +0100
parents 48aaf49a6947
children 4680bb126b8e
files src/syntax.c src/version.c
diffstat 2 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -6988,8 +6988,22 @@ init_highlight(both, reset)
      * and 'background' or 't_Co' is changed.
      */
     p = get_var_value((char_u *)"g:colors_name");
-    if (p != NULL && load_colors(p) == OK)
-	return;
+    if (p != NULL)
+    {
+       /* The value of g:colors_name could be freed when sourcing the script,
+	* making "p" invalid, so copy it. */
+       char_u *copy_p = vim_strsave(p);
+       int    r;
+
+       if (copy_p != NULL)
+       {
+	   r = load_colors(copy_p);
+	   vim_free(copy_p);
+	   if (r == OK)
+	       return;
+       }
+    }
+
 #endif
 
     /*
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    660,
+/**/
     659,
 /**/
     658,