[PATCH] cli: Consume invalid escape sequences early

Simon Glass sjg at google.com
Sun Oct 8 01:10:00 CEST 2023


Hi Yurii,

On Fri, 6 Oct 2023 at 15:32, Yurii Monakov <monakov.y at gmail.com> wrote:
>
> This commit fixes some issues with extra 'Esc' keys entered by user:
>
> 1. Sequence <Esc><Esc><Enter> right after autoboot stop gives:
> =>
> nknown command 'ry 'help'
> =>
> 2. Sequence <Esc><p><r><i><Enter> gives:
> => ri
> Unknown command 'ri' - try 'help'
> =>
> 3. Extra 'Esc' key presses break backspace functionality.
>
> Signed-off-by: Yurii Monakov <monakov.y at gmail.com>
> ---
>  common/cli_getch.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/common/cli_getch.c b/common/cli_getch.c
> index 61d4cb261b..0ee7908777 100644
> --- a/common/cli_getch.c
> +++ b/common/cli_getch.c
> @@ -46,6 +46,8 @@ static int cli_ch_esc(struct cli_ch_state *cch, int ichar,
>         case 1:
>                 if (ichar == '[' || ichar == 'O')
>                         act = ESC_SAVE;
> +               else
> +                       act = ESC_CONVERTED;
>                 break;
>         case 2:
>                 switch (ichar) {
> --
> 2.34.1
>

This is a bit unfortunate. Basically the problem (as I understand it)
is that characters are built up for processing so the expected ichar
== 0 is never passed in.

I think the fix is reasonable. Does it work as well if use:

               else if (ichar == '\e')
                       act = ESC_CONVERTED;

?

Also please can you add a test case o test/common/cread.c

https://u-boot.readthedocs.io/en/latest/develop/tests_sandbox.html

Regards,
Simon


More information about the U-Boot mailing list