To: vim_dev@googlegroups.com Subject: Patch 8.2.0334 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.0334 Problem: Abort called when using test_void(). (Dominique Pelle) Solution: Only give an error, don't abort. Files: src/message.c, src/proto/message.pro, src/evalfunc.c, src/eval.c, src/json.c, src/testdir/test_functions.vim *** ../vim-8.2.0333/src/message.c 2020-02-22 14:26:39.240757862 +0100 --- src/message.c 2020-02-29 17:06:19.120469767 +0100 *************** *** 838,843 **** --- 838,853 ---- siemsg(_(e_intern2), where); } + /* + * Like internal_error() but do not call abort(), to avoid tests using + * test_unknown() and test_void() causing Vim to exit. + */ + void + internal_error_no_abort(char *where) + { + semsg(_(e_intern2), where); + } + // emsg3() and emsgn() are in misc2.c to avoid warnings for the prototypes. void *** ../vim-8.2.0333/src/proto/message.pro 2020-01-26 15:52:33.023833239 +0100 --- src/proto/message.pro 2020-02-29 17:06:20.812463889 +0100 *************** *** 12,17 **** --- 12,18 ---- int emsg(char *s); void iemsg(char *s); void internal_error(char *where); + void internal_error_no_abort(char *where); void emsg_invreg(int name); void emsg_namelen(char *msg, char_u *name, int len); char *msg_trunc_attr(char *s, int force, int attr); *** ../vim-8.2.0333/src/evalfunc.c 2020-02-29 13:43:23.694780190 +0100 --- src/evalfunc.c 2020-02-29 17:05:21.880668666 +0100 *************** *** 1890,1899 **** #endif case VAR_UNKNOWN: case VAR_VOID: ! // Let's not use internal_error() here, otherwise ! // empty(test_unknown()) with ABORT_ON_INTERNAL_ERROR defined makes ! // Vim abort. ! semsg(_(e_intern2), "f_empty(UNKNOWN)"); n = TRUE; break; } --- 1890,1896 ---- #endif case VAR_UNKNOWN: case VAR_VOID: ! internal_error_no_abort("f_empty(UNKNOWN)"); n = TRUE; break; } *************** *** 8278,8287 **** case VAR_BLOB: n = VAR_TYPE_BLOB; break; case VAR_UNKNOWN: case VAR_VOID: ! // Let's not use internal_error() here, otherwise ! // empty(test_unknown()) with ABORT_ON_INTERNAL_ERROR defined ! // makes Vim abort. ! semsg(_(e_intern2), "f_type(UNKNOWN)"); n = -1; break; } --- 8275,8281 ---- case VAR_BLOB: n = VAR_TYPE_BLOB; break; case VAR_UNKNOWN: case VAR_VOID: ! internal_error_no_abort("f_type(UNKNOWN)"); n = -1; break; } *** ../vim-8.2.0333/src/eval.c 2020-02-22 14:26:39.244757847 +0100 --- src/eval.c 2020-02-29 17:32:53.807510396 +0100 *************** *** 5560,5566 **** break; case VAR_UNKNOWN: case VAR_VOID: ! internal_error("tv_get_number(UNKNOWN)"); break; } if (denote == NULL) // useful for values that must be unsigned --- 5560,5566 ---- break; case VAR_UNKNOWN: case VAR_VOID: ! internal_error_no_abort("tv_get_number(UNKNOWN)"); break; } if (denote == NULL) // useful for values that must be unsigned *************** *** 5614,5620 **** break; case VAR_UNKNOWN: case VAR_VOID: ! internal_error("tv_get_float(UNKNOWN)"); break; } return 0; --- 5614,5620 ---- break; case VAR_UNKNOWN: case VAR_VOID: ! internal_error_no_abort("tv_get_float(UNKNOWN)"); break; } return 0; *************** *** 5886,5892 **** break; case VAR_UNKNOWN: case VAR_VOID: ! internal_error("copy_tv(UNKNOWN)"); break; } } --- 5886,5892 ---- break; case VAR_UNKNOWN: case VAR_VOID: ! internal_error_no_abort("copy_tv(UNKNOWN)"); break; } } *************** *** 5965,5971 **** break; case VAR_UNKNOWN: case VAR_VOID: ! internal_error("item_copy(UNKNOWN)"); ret = FAIL; } --recurse; --- 5965,5971 ---- break; case VAR_UNKNOWN: case VAR_VOID: ! internal_error_no_abort("item_copy(UNKNOWN)"); ret = FAIL; } --recurse; *** ../vim-8.2.0333/src/json.c 2020-02-25 21:26:46.275580512 +0100 --- src/json.c 2020-02-29 17:08:39.495982377 +0100 *************** *** 352,358 **** #endif case VAR_UNKNOWN: case VAR_VOID: ! internal_error("json_encode_item()"); return FAIL; } return OK; --- 352,358 ---- #endif case VAR_UNKNOWN: case VAR_VOID: ! internal_error_no_abort("json_encode_item()"); return FAIL; } return OK; *** ../vim-8.2.0333/src/testdir/test_functions.vim 2020-02-29 13:43:23.694780190 +0100 --- src/testdir/test_functions.vim 2020-02-29 17:33:25.495408181 +0100 *************** *** 63,68 **** --- 63,78 ---- call assert_fails("call empty(test_unknown())", 'E685:') endfunc + func Test_test_void() + call assert_fails('echo 1 == test_void()', 'E685:') + if has('float') + call assert_fails('echo 1.0 == test_void()', 'E685:') + endif + call assert_fails('let x = json_encode(test_void())', 'E685:') + call assert_fails('let x = copy(test_void())', 'E685:') + call assert_fails('let x = copy([test_void()])', 'E685:') + endfunc + func Test_len() call assert_equal(1, len(0)) call assert_equal(2, len(12)) *** ../vim-8.2.0333/src/version.c 2020-02-29 16:09:11.984263511 +0100 --- src/version.c 2020-02-29 17:37:51.546542590 +0100 *************** *** 740,741 **** --- 740,743 ---- { /* Add new patch number below this line */ + /**/ + 334, /**/ -- hundred-and-one symptoms of being an internet addict: 137. You decide to stay in college for an additional year or two, just so you can have the free Internet access. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///