aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2016-12-25 19:37:13 +0300
committerZyX <kp-pav@yandex.ru>2017-01-03 06:39:23 +0300
commitc5c75513b81398f05a4e63b2f7207ae74de25ecc (patch)
tree336a14150e8b59d04fdc9b8bae28a8dd99ccc5c0 /src/nvim/eval.c
parentefe1476d4293170496f0e933a4d3c955f0559b03 (diff)
downloadrneovim-c5c75513b81398f05a4e63b2f7207ae74de25ecc.tar.gz
rneovim-c5c75513b81398f05a4e63b2f7207ae74de25ecc.tar.bz2
rneovim-c5c75513b81398f05a4e63b2f7207ae74de25ecc.zip
eval/typval_encode: Make partial conversions not recursive
Is known to crash in the current state. Ref #5825.
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r--src/nvim/eval.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index ea42a58cdd..dbc279685a 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -19070,22 +19070,24 @@ void free_tv(typval_T *varp)
#define TYPVAL_ENCODE_CONV_EXT_STRING(ignored1, ignored2, ignored3)
-#define TYPVAL_ENCODE_CONV_FUNC(fun) \
+#define TYPVAL_ENCODE_CONV_FUNC_START(fun, is_partial, pt) \
do { \
- func_unref(fun); \
- if (fun != empty_string) { \
- xfree(fun); \
+ if (is_partial) { \
+ partial_unref(pt); \
+ tv->vval.v_partial = NULL; \
+ } else { \
+ func_unref(fun); \
+ if (fun != empty_string) { \
+ xfree(fun); \
+ } \
+ tv->vval.v_string = NULL; \
} \
- tv->vval.v_string = NULL; \
tv->v_lock = VAR_UNLOCKED; \
} while (0)
-#define TYPVAL_ENCODE_CONV_PARTIAL(pt) \
- do { \
- partial_unref(pt); \
- pt = NULL; \
- tv->v_lock = VAR_UNLOCKED; \
- } while (0)
+#define TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS(len)
+#define TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF(len)
+#define TYPVAL_ENCODE_CONV_FUNC_END()
#define TYPVAL_ENCODE_CONV_EMPTY_LIST() \
do { \
@@ -19162,8 +19164,10 @@ TYPVAL_ENCODE_DEFINE_CONV_FUNCTIONS(static, nothing, void *, ignored)
#undef TYPVAL_ENCODE_CONV_STRING
#undef TYPVAL_ENCODE_CONV_STR_STRING
#undef TYPVAL_ENCODE_CONV_EXT_STRING
-#undef TYPVAL_ENCODE_CONV_FUNC
-#undef TYPVAL_ENCODE_CONV_PARTIAL
+#undef TYPVAL_ENCODE_CONV_FUNC_START
+#undef TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS
+#undef TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF
+#undef TYPVAL_ENCODE_CONV_FUNC_END
#undef TYPVAL_ENCODE_CONV_EMPTY_LIST
#undef TYPVAL_ENCODE_CONV_EMPTY_DICT
#undef TYPVAL_ENCODE_CONV_LIST_START