summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-04-20 18:54:50 +0200
committerBram Moolenaar <Bram@vim.org>2017-04-20 18:54:50 +0200
commit60402d68da09997cacdeec71fd22c9344f8f40d5 (patch)
tree1552a02d40e8641654264b42ce8f8470aa6faa93
parentfc8f1118e7ccd65b0537e47e6323c93a1df6a61a (diff)
patch 8.0.0568: 1gd may hangv8.0.0568
Problem: "1gd" may hang. Solution: Don't get stuck in one position. (Christian Brabandt, closes #1643)
-rw-r--r--src/normal.c6
-rw-r--r--src/testdir/test_goto.vim21
-rw-r--r--src/version.c2
3 files changed, 29 insertions, 0 deletions
diff --git a/src/normal.c b/src/normal.c
index 53bda6cc74..25c0986b43 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -4371,7 +4371,12 @@ find_decl(
if ((pos = findmatchlimit(NULL, '}', FM_FORWARD,
(int)(old_pos.lnum - curwin->w_cursor.lnum + 1))) != NULL
&& pos->lnum < old_pos.lnum)
+ {
+ /* There can't be a useful match before the end of this block.
+ * Skip to the end. */
+ curwin->w_cursor = *pos;
continue;
+ }
}
if (t == FAIL)
@@ -8311,6 +8316,7 @@ nv_g_cmd(cmdarg_T *cap)
break;
#endif
+ /* "g<": show scrollback text */
case '<':
show_sb_text();
break;
diff --git a/src/testdir/test_goto.vim b/src/testdir/test_goto.vim
index 2573401707..ea67fe7386 100644
--- a/src/testdir/test_goto.vim
+++ b/src/testdir/test_goto.vim
@@ -288,3 +288,24 @@ func Test_cursorline_keep_col()
set nocursorline
endfunc
+func Test_gd_local_block()
+ let lines = [
+ \ ' int main()',
+ \ '{',
+ \ ' char *a = "NOT NULL";',
+ \ ' if(a)',
+ \ ' {',
+ \ ' char *b = a;',
+ \ ' printf("%s\n", b);',
+ \ ' }',
+ \ ' else',
+ \ ' {',
+ \ ' char *b = "NULL";',
+ \ ' return b;',
+ \ ' }',
+ \ '',
+ \ ' return 0;',
+ \ '}',
+ \ ]
+ call XTest_goto_decl('1gd', lines, 11, 11)
+endfunc
diff --git a/src/version.c b/src/version.c
index 487712d069..b9790d41e3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 568,
+/**/
567,
/**/
566,