diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-09-09 12:34:19 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-09-09 12:34:19 +0200 |
commit | 0325d3967ce7d0fd35bc1472fd476b911b895b76 (patch) | |
tree | 448384104e1ead38d69e75a361ea7d8defa5ca94 | |
parent | 070ac3433b0ebefd6dc6cd49707fcfa1421b9e67 (diff) | |
download | vim-git-0325d3967ce7d0fd35bc1472fd476b911b895b76.tar.gz |
patch 8.2.3419: a failing debug expression may make Vim unusablev8.2.3419
Problem: A failing debug expression may make Vim unusable.
Solution: Suppress error messages. (closes #8848)
-rw-r--r-- | src/debugger.c | 22 | ||||
-rw-r--r-- | src/testdir/test_debugger.vim | 4 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 11 insertions, 17 deletions
diff --git a/src/debugger.c b/src/debugger.c index fc0aa0365..ec948eb38 100644 --- a/src/debugger.c +++ b/src/debugger.c @@ -532,23 +532,17 @@ static linenr_T debuggy_find(int file,char_u *fname, linenr_T after, garray_T *g /* * Evaluate the "bp->dbg_name" expression and return the result. - * Restore the got_int and called_emsg flags. + * Disables error messages. */ static typval_T * -eval_expr_restore(struct debuggy *bp) +eval_expr_no_emsg(struct debuggy *bp) { typval_T *tv; - int prev_called_emsg = called_emsg; - int prev_did_emsg = did_emsg; - got_int = FALSE; + // Disable error messages, a bad expression would make Vim unusable. + ++emsg_off; tv = eval_expr(bp->dbg_name, NULL); - - // Evaluating the expression should not result in breaking the sequence of - // commands. - got_int = FALSE; - called_emsg = prev_called_emsg; - did_emsg = prev_did_emsg; + --emsg_off; return tv; } @@ -637,7 +631,7 @@ dbg_parsearg( { bp->dbg_name = vim_strsave(p); if (bp->dbg_name != NULL) - bp->dbg_val = eval_expr_restore(bp); + bp->dbg_val = eval_expr_no_emsg(bp); } else { @@ -983,7 +977,7 @@ debuggy_find( typval_T *tv; int line = FALSE; - tv = eval_expr_restore(bp); + tv = eval_expr_no_emsg(bp); if (tv != NULL) { if (bp->dbg_val == NULL) @@ -1004,7 +998,7 @@ debuggy_find( debug_oldval = typval_tostring(bp->dbg_val, TRUE); // Need to evaluate again, typval_compare() overwrites // "tv". - v = eval_expr_restore(bp); + v = eval_expr_no_emsg(bp); debug_newval = typval_tostring(v, TRUE); free_tv(bp->dbg_val); bp->dbg_val = v; diff --git a/src/testdir/test_debugger.vim b/src/testdir/test_debugger.vim index 71fdedc5c..957f5ac79 100644 --- a/src/testdir/test_debugger.vim +++ b/src/testdir/test_debugger.vim @@ -271,9 +271,7 @@ func Test_Debugger() call RunDbgCmd(buf, 'breakd func a()', ['E475: Invalid argument: func a()']) call RunDbgCmd(buf, 'breakd func a', ['E161: Breakpoint not found: func a']) call RunDbgCmd(buf, 'breakd expr', ['E475: Invalid argument: expr']) - call RunDbgCmd(buf, 'breakd expr x', [ - \ 'E121: Undefined variable: x', - \ 'E161: Breakpoint not found: expr x']) + call RunDbgCmd(buf, 'breakd expr x', ['E161: Breakpoint not found: expr x']) " finish the current function call RunDbgCmd(buf, 'finish', [ diff --git a/src/version.c b/src/version.c index b6216e98b..664f4ca8c 100644 --- a/src/version.c +++ b/src/version.c @@ -756,6 +756,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3419, +/**/ 3418, /**/ 3417, |