summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2015-03-13 12:53:37 +0100
committerBram Moolenaar <Bram@vim.org>2015-03-13 12:53:37 +0100
commitc7dc1f4a53fdb26b88c484003142c575655481b7 (patch)
tree22b0474fe00822ad8280d471eb9dce1e43f9f1d4
parent488eb26ec7fda1dc79f3d856d40da072332630b6 (diff)
updated for version 7.4.660v7.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.
-rw-r--r--src/syntax.c18
-rw-r--r--src/version.c2
2 files changed, 18 insertions, 2 deletions
diff --git a/src/syntax.c b/src/syntax.c
index 483a9b02f4..788a9f5aab 100644
--- 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
/*
diff --git a/src/version.c b/src/version.c
index 21a910d702..11d2ff2e22 100644
--- 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,