updated for version 7.4.020
Problem:    NFA engine matches too much with \@>. (John McGowan)
Solution:   When a whole pattern match is found stop searching.
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index 5288eb6..fe1d025 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -5322,7 +5322,10 @@
 		log_subsexpr(m);
 #endif
 		nfa_match = TRUE;
-		break;
+		/* See comment above at "goto nextchar". */
+		if (nextlist->n == 0)
+		    clen = 0;
+		goto nextchar;
 
 	    case NFA_START_INVISIBLE:
 	    case NFA_START_INVISIBLE_FIRST:
diff --git a/src/testdir/test64.in b/src/testdir/test64.in
index ac3f13d..8f7008c 100644
--- a/src/testdir/test64.in
+++ b/src/testdir/test64.in
@@ -427,6 +427,7 @@
 :""""" \@>
 :call add(tl, [2, '\(a*\)\@>a', 'aaaa'])
 :call add(tl, [2, '\(a*\)\@>b', 'aaab', 'aaab', 'aaa'])
+:call add(tl, [2, '^\(.\{-}b\)\@>.', '  abcbd', '  abc', '  ab'])
 :" TODO: BT engine does not restore submatch after failure
 :call add(tl, [1, '\(a*\)\@>a\|a\+', 'aaaa', 'aaaa'])
 :"
diff --git a/src/testdir/test64.ok b/src/testdir/test64.ok
index da19c04..fa83f91 100644
--- a/src/testdir/test64.ok
+++ b/src/testdir/test64.ok
@@ -983,6 +983,9 @@
 OK 0 - \(a*\)\@>b
 OK 1 - \(a*\)\@>b
 OK 2 - \(a*\)\@>b
+OK 0 - ^\(.\{-}b\)\@>.
+OK 1 - ^\(.\{-}b\)\@>.
+OK 2 - ^\(.\{-}b\)\@>.
 OK 0 - \(a*\)\@>a\|a\+
 OK 2 - \(a*\)\@>a\|a\+
 OK 0 - \_[^8-9]\+
diff --git a/src/version.c b/src/version.c
index 0e6dc1c..99c9d22 100644
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    20,
+/**/
     19,
 /**/
     18,