aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
authorMichael Ennen <mike.ennen@gmail.com>2016-12-16 14:56:09 -0700
committerMichael Ennen <mike.ennen@gmail.com>2017-02-14 17:38:18 -0700
commite71e9020eb31cfd606469e5d5ab97500232c65d6 (patch)
treeb01f810be4991d5463480afddb5a496f6905e999 /src/nvim/eval.c
parent53fad45115d3ee438dfb537d99ccf3b021ebc6b7 (diff)
downloadrneovim-e71e9020eb31cfd606469e5d5ab97500232c65d6.tar.gz
rneovim-e71e9020eb31cfd606469e5d5ab97500232c65d6.tar.bz2
rneovim-e71e9020eb31cfd606469e5d5ab97500232c65d6.zip
vim-patch:7.4.2139
Problem: :delfunction causes illegal memory access. Solution: Correct logic when deciding to free a function. https://github.com/vim/vim/commit/0588d4f9d2741f35a271400a37fddbdd72d84219
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r--src/nvim/eval.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 2e0ac6034d..70c47b09a6 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -219,7 +219,7 @@ static int echo_attr = 0; /* attributes used for ":echo" */
#define FC_REMOVED 32 // function redefined while uf_refcount > 0
// The names of packages that once were loaded are remembered.
-static garray_T ga_loaded = {0, 0, sizeof(char_u *), 4, NULL};
+static garray_T ga_loaded = { 0, 0, sizeof(char_u *), 4, NULL };
// List heads for garbage collection. Although there can be a reference loop
// from partial to dict to partial, we don't need to keep track of the partial,
@@ -20926,6 +20926,7 @@ void ex_function(exarg_T *eap)
int varargs = false;
int flags = 0;
ufunc_T *fp;
+ bool overwrite = false;
int indent;
int nesting;
char_u *skip_until = NULL;
@@ -21337,7 +21338,7 @@ void ex_function(exarg_T *eap)
} else {
// redefine existing function
ga_clear_strings(&(fp->uf_args));
- ga_clear_strings(&(fp->uf_lines))
+ ga_clear_strings(&(fp->uf_lines));
xfree(name);
name = NULL;
}
@@ -22156,7 +22157,7 @@ void ex_delfunction(exarg_T *eap)
// Numbered functions and lambdas snould be kept if the refcount is
// one or more.
if (fp->uf_refcount > (isdigit(fp->uf_name[0])
- || fp->uf_name[0] == '<') ? 0 : 1) {
+ || fp->uf_name[0] == '<' ? 0 : 1)) {
// Function is still referenced somewhere. Don't free it but
// do remove it from the hashtable.
func_remove(fp);