If a control character is used in the isearch search string (using ^V or
bracketed paste), it will be printed in the message area, so make it
visible to make the prompt display correctly.
---
 lib/readline/isearch.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/lib/readline/isearch.c b/lib/readline/isearch.c
index 6cb1879d..ec4ea276 100644
--- a/lib/readline/isearch.c
+++ b/lib/readline/isearch.c
@@ -156,7 +156,7 @@ rl_display_search (char *search_string, int flags, int 
where)
 
   searchlen = (search_string && *search_string) ? strlen (search_string) : 0;
 
-  message = (char *)xmalloc (searchlen + 64);
+  message = (char *)xmalloc (searchlen * 2 + 64);
   msglen = 0;
 
 #if defined (NOTDEF)
@@ -185,10 +185,15 @@ rl_display_search (char *search_string, int flags, int 
where)
   msglen += 10;
 
   if (search_string && *search_string)
-    {
-      strcpy (message + msglen, search_string);
-      msglen += searchlen;
-    }
+    for (char c; c = *search_string; search_string++)
+      {
+       if (CTRL_CHAR (c) || c == RUBOUT)
+         {
+           message[msglen++] = '^';
+           c = CTRL_CHAR (c) ? UNCTRL (c) : '?';
+         }
+       message[msglen++] = c;
+      }
   else
     _rl_optimize_redisplay ();
 
-- 
2.50.1


Reply via email to