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