diff src/channel.c @ 7937:2e905dfc6999 v7.4.1264

commit https://github.com/vim/vim/commit/6076fe1986255d32b7a078a28bf9e7bea19d6f30 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Feb 5 22:49:56 2016 +0100 patch 7.4.1264 Problem: Crash when receiving an empty array. Solution: Check for array with wrong number of arguments. (Damien)
author Christian Brabandt <cb@256bit.org>
date Fri, 05 Feb 2016 23:00:05 +0100
parents 3f2e0b62003d
children e72438a11172
line wrap: on
line diff
--- a/src/channel.c
+++ b/src/channel.c
@@ -688,7 +688,9 @@ channel_parse_json(int ch_idx)
     ret = json_decode(&reader, &listtv);
     if (ret == OK)
     {
-	if (listtv.v_type != VAR_LIST)
+	/* Only accept the response when it is a list with at least two
+	 * items. */
+	if (listtv.v_type != VAR_LIST || listtv.vval.v_list->lv_len < 2)
 	{
 	    /* TODO: give error */
 	    clear_tv(&listtv);
@@ -909,13 +911,6 @@ may_invoke_callback(int idx)
 	}
 
 	list = listtv->vval.v_list;
-	if (list->lv_len < 2)
-	{
-	    /* TODO: give error */
-	    clear_tv(listtv);
-	    return FALSE;
-	}
-
 	argv[1] = list->lv_first->li_next->li_tv;
 	typetv = &list->lv_first->li_tv;
 	if (typetv->v_type == VAR_STRING)