diff --git a/src/screen.c b/src/screen.c
index b3b98bf65ae00c1abd1437ebb69207d9011a5a31..eb7a63ae21cd8a856bf4e6795c9b591242b20cf1 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -6477,9 +6477,15 @@ next_search_hl(win, shl, lnum, mincol)
 	if (called_emsg)
 	{
 	    /* Error while handling regexp: stop using this regexp. */
-	    vim_free(shl->rm.regprog);
+	    if (shl == &search_hl)
+	    {
+		/* don't free the regprog in match_hl[], it's a copy */
+		vim_free(shl->rm.regprog);
+		no_hlsearch = TRUE;
+	    }
 	    shl->rm.regprog = NULL;
-	    no_hlsearch = TRUE;
+	    shl->lnum = 0;
+	    got_int = FALSE;  /* avoid the "Type :quit to exit Vim" message */
 	    break;
 	}
 	if (nmatched == 0)
diff --git a/src/version.c b/src/version.c
index ee864a8e7ca5b153f3768d806267691f2a63add1..d61acc7a983c89be94d7ef2bf12042e2e5ba4ebb 100644
--- a/src/version.c
+++ b/src/version.c
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    238,
 /**/
     237,
 /**/