patch 9.1.1185: endless loop with completefuzzycollect and no match found

Problem:  endless loop with completefuzzycollect and no match found
Solution: move pointer to line end and break loop

closes: #16820

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/insexpand.c b/src/insexpand.c
index f770041..d8bb081 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -217,7 +217,6 @@
 static void ins_compl_longest_match(compl_T *match);
 static void ins_compl_del_pum(void);
 static void ins_compl_files(int count, char_u **files, int thesaurus, int flags, regmatch_T *regmatch, char_u *buf, int *dir);
-static char_u *find_line_end(char_u *ptr);
 static void ins_compl_free(void);
 static int  ins_compl_need_restart(void);
 static void ins_compl_new_leader(void);
@@ -1870,8 +1869,6 @@
 				&& score == compl_first_match->cp_next->cp_score)
 			    compl_num_bests++;
 		    }
-		    else if (find_word_end(ptr) == line_end)
-			break;
 		}
 	    }
 	    line_breakcheck();
@@ -1927,7 +1924,7 @@
  * Find the end of the line, omitting CR and NL at the end.
  * Returns a pointer to just after the line.
  */
-    static char_u *
+    char_u *
 find_line_end(char_u *ptr)
 {
     char_u	*s;
diff --git a/src/proto/insexpand.pro b/src/proto/insexpand.pro
index 8d96164..2d1d12c 100644
--- a/src/proto/insexpand.pro
+++ b/src/proto/insexpand.pro
@@ -65,4 +65,6 @@
 void free_insexpand_stuff(void);
 int ins_compl_preinsert_effect(void);
 int ins_compl_lnum_in_range(linenr_T lnum);
+char_u *find_line_end(char_u *ptr);
+
 /* vim: set ft=c : */
diff --git a/src/search.c b/src/search.c
index 67082a7..654b896 100644
--- a/src/search.c
+++ b/src/search.c
@@ -5229,8 +5229,7 @@
  * - `*len` is set to the length of the matched word.
  * - `*score` contains the match score.
  *
- * If no match is found, `*ptr` is updated to point beyond the last word
- * or to the end of the line.
+ * If no match is found, `*ptr` is updated to to the end of the line.
  */
     int
 fuzzy_match_str_in_line(
@@ -5246,11 +5245,13 @@
     char_u	*start = NULL;
     int		found = FALSE;
     char	save_end;
+    char_u	*line_end = NULL;
 
     if (str == NULL || pat == NULL)
         return found;
+    line_end = find_line_end(str);
 
-    while (*str != NUL)
+    while (str < line_end)
     {
 	// Skip non-word characters
 	start = find_word_start(str);
@@ -5283,6 +5284,9 @@
 	    MB_PTR_ADV(str);
     }
 
+    if (!found)
+	*ptr = line_end;
+
     return found;
 }
 
diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim
index 345e365..e63b133 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -3005,6 +3005,11 @@
   call writefile(['  auto int   enum register', 'why'], 'test_case4.txt', 'D')
   exe "normal ggdGSe\<C-N>\<C-N>\<ESC>"
   call assert_equal("enum", getline('.'))
+
+  set complete=ktest_case5.txt
+  call writefile(['hello friends', 'go', 'hero'], 'test_case5.txt', 'D')
+  exe "normal ggdGSh\<C-N>\<C-N>\<ESC>"
+  call assert_equal("hero", getline('.'))
   set complete&
 
   " file
diff --git a/src/version.c b/src/version.c
index 8223d0c..1bfcbcb 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1185,
+/**/
     1184,
 /**/
     1183,