# HG changeset patch # User Bram Moolenaar # Date 1639734307 -3600 # Node ID 1eb62546e20c17c0f7dff6fc1fe0b888218b3da5 # Parent 6569c68ede92adff7bcb67a037219137862ee400 patch 8.2.3833: error from term_start() not caught by try/catch Commit: https://github.com/vim/vim/commit/c3f91c0648f4b04a6a9ceb4ccec45ea767a63796 Author: ichizok Date: Fri Dec 17 09:44:33 2021 +0000 patch 8.2.3833: error from term_start() not caught by try/catch Problem: Error from term_start() not caught by try/catch. Solution: save and restore did_emsg when applying autocommands. (Ozaki Kiichi, closes #9361) diff --git a/src/autocmd.c b/src/autocmd.c --- a/src/autocmd.c +++ b/src/autocmd.c @@ -1891,6 +1891,7 @@ apply_autocmds_group( int did_save_redobuff = FALSE; save_redo_T save_redo; int save_KeyTyped = KeyTyped; + int save_did_emsg; ESTACK_CHECK_DECLARATION /* @@ -2171,9 +2172,13 @@ apply_autocmds_group( // make sure cursor and topline are valid check_lnums(TRUE); + save_did_emsg = did_emsg; + do_cmdline(NULL, getnextac, (void *)&patcmd, DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT); + did_emsg += save_did_emsg; + if (nesting == 1) // restore cursor and topline, unless they were changed reset_lnums(); diff --git a/src/testdir/test_terminal3.vim b/src/testdir/test_terminal3.vim --- a/src/testdir/test_terminal3.vim +++ b/src/testdir/test_terminal3.vim @@ -901,5 +901,25 @@ func Test_terminal_getwinpos() only! endfunc +func Test_terminal_term_start_error() + func s:term_start_error() abort + try + return term_start([[]]) + catch + return v:exception + finally + " + endtry + endfunc + autocmd WinEnter * call type(0) + + " Must not crash in s:term_start_error, nor the exception thrown. + let result = s:term_start_error() + call assert_match('^Vim(return):E730:', result) + + autocmd! WinEnter + delfunc s:term_start_error +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3833, +/**/ 3832, /**/ 3831,