[prev in list] [next in list] [prev in thread] [next in thread]
List: bash-bug
Subject: [PATCH v2] read: non-raw-mode fixes
From: Grisha Levit <grishalevit () gmail ! com>
Date: 2023-07-26 23:53:28
Message-ID: CAMu=Bronfo29sUHNZXdjiYu_akfkfph-h=rRQSK=Bh2WQghz2A () mail ! gmail ! com
[Download RAW message or body]
On Wed, Jul 26, 2023 at 2:23 PM Grisha Levit <grishalevit@gmail.com> wrote:
> If the last character read was an (unescaped) backslash, store it as
> such instead of as a CTLESC. Avoids:
>
> $ printf '\\' | { read; echo "${REPLY@Q}"; }
> bash: DEBUG warning: dequote_string: string with bare CTLESC
> $'\001'
Sorry that was wrong, the CTLESC should just be removed. Much simpler
patch below.
---
diff --git a/builtins/read.def b/builtins/read.def
index 5b2621fe..ce5bcc38 100644
--- a/builtins/read.def
+++ b/builtins/read.def
@@ -751,11 +751,11 @@ read_builtin (WORD_LIST *list)
if (pass_next)
{
pass_next = 0;
- if (c == '\n')
+ if (c == '\n' || c == '\0')
{
if (skip_ctlesc == 0 && i > 0)
i--; /* back up over the CTLESC */
- if (interactive && input_is_tty && raw == 0)
+ if (interactive && input_is_tty && raw == 0 && c == '\n')
print_ps2 = 1;
}
else
@@ -825,6 +825,11 @@ add_char:
if (nchars > 0 && nr >= nchars)
break;
}
+
+ if (pass_next && skip_ctlesc == 0)
+ i--; /* back up over the CTLESC */
+ if (skip_ctlnul && saw_escape && i == 1 && input_string[0] == CTLNUL)
+ saw_escape = 0; /* Avoid dequoting bare CTLNUL */
input_string[i] = '\0';
check_read_timeout ();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic