patch 9.1.1272: completion: in keyword completion Ctrl_P cannot go back after Ctrl_N

Problem:  completion: in keyword completion Ctrl_P cannot go back after
          Ctrl_N
Solution: in find_compl_when_fuzzy() always return first match of array, after Ctrl_P
          use compl_shown_match->cp_next instead of compl_first_match.
          (glepnir)

closes: #17043

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 de3d519..9df0445 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -4831,7 +4831,8 @@
 
     if ((is_forward && compl_selected_item == compl_match_arraysize - 1)
 	    || (is_backward && compl_selected_item == 0))
-	return compl_first_match != compl_shown_match ? compl_first_match :
+	return compl_first_match != compl_shown_match ?
+	    (is_forward ? compl_shown_match->cp_next : compl_first_match) :
 	    (compl_first_match->cp_prev ? compl_first_match->cp_prev : NULL);
 
     if (is_forward)
diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim
index f60aba8..bc971b5 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -2834,6 +2834,8 @@
   call assert_equal('bar', getline('.'))
   call feedkeys("Sb\<C-X>\<C-N>\<C-Y>\<ESC>", 'tx')
   call assert_equal('blue', getline('.'))
+  call feedkeys("Sb\<C-X>\<C-P>\<C-N>\<C-Y>\<ESC>", 'tx')
+  call assert_equal('b', getline('.'))
 
   " clean up
   set omnifunc=
diff --git a/src/version.c b/src/version.c
index f77ff47..28c0248 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1272,
+/**/
     1271,
 /**/
     1270,