patch 8.0.0298: Ex command range with repeated search does not work

Problem:    Ex command range with repeated search does not work. (Bruce
            DeVisser)
Solution:   Skip over \/, \? and \&.
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index f93c766..3ee7056 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -4357,9 +4357,16 @@
 {
     unsigned	delim;
 
-    while (vim_strchr((char_u *)" \t0123456789.$%'/?-+,;", *cmd) != NULL)
+    while (vim_strchr((char_u *)" \t0123456789.$%'/?-+,;\\", *cmd) != NULL)
     {
-	if (*cmd == '\'')
+	if (*cmd == '\\')
+	{
+	    if (cmd[1] == '?' || cmd[1] == '/' || cmd[1] == '&')
+		++cmd;
+	    else
+		break;
+	}
+	else if (*cmd == '\'')
 	{
 	    if (*++cmd == NUL && ctx != NULL)
 		*ctx = EXPAND_NOTHING;
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index fcfce73..aa8fb13 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -306,3 +306,28 @@
   call assert_equal(a, b)
   bw!
 endfunc
+
+" using a leading backslash here
+set cpo+=C
+
+func Test_cmdline_search_range()
+  new
+  call setline(1, ['a', 'b', 'c', 'd'])
+  /d
+  1,\/s/b/B/
+  call assert_equal('B', getline(2))
+
+  /a
+  $
+  \?,4s/c/C/
+  call assert_equal('C', getline(3))
+
+  call setline(1, ['a', 'b', 'c', 'd'])
+  %s/c/c/
+  1,\&s/b/B/
+  call assert_equal('B', getline(2))
+
+  bwipe!
+endfunc
+
+set cpo&
diff --git a/src/version.c b/src/version.c
index c85a57f..93a59cd 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    298,
+/**/
     297,
 /**/
     296,