[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    Re: [PATCH] vi: deal with invalid movements in shift commands
From:       Denys Vlasenko <vda.linux () googlemail ! com>
Date:       2021-03-30 12:53:52
Message-ID: CAK1hOcNVxhvqUwEiXhs=w7zAGL0q56e82MvzfsEi+t-oDZeTxg () mail ! gmail ! com
[Download RAW message or body]

Applied, thank you.

On Tue, Mar 30, 2021 at 2:02 PM Ron Yorston <rmy@pobox.com> wrote:
>
> Since commit 25d259264 (vi: make buffer handling more vi-like)
> find_range() can return early when an invalid movement is
> specified.
>
> The call to find_range() in the code that handles shift commands
> ('<' and '>') doesn't check for this condition.  Previously this
> only resulted in the current line being shifted but it can now
> result in a segfault.
>
> Check for an invalid movement and notify the user without taking
> any further action.
>
> function                                             old     new   delta
> do_cmd                                              4890    4898      +8
> ------------------------------------------------------------------------------
> (add/remove: 0/0 grow/shrink: 1/0 up/down: 8/0)                 Total: 8 bytes
>
> Signed-off-by: Ron Yorston <rmy@pobox.com>
> ---
>  editors/vi.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/editors/vi.c b/editors/vi.c
> index 4fa67a110..dd2e055d1 100644
> --- a/editors/vi.c
> +++ b/editors/vi.c
> @@ -3574,7 +3574,10 @@ static void do_cmd(int c)
>         case '>':                       // >- Right shift something
>                 cnt = count_lines(text, dot);   // remember what line we are on
>                 c1 = get_motion_char(); // get the type of thing to operate on
> -               find_range(&p, &q, c1);
> +               if (find_range(&p, &q, c1) == -1) {
> +                       indicate_error();
> +                       goto dc6;
> +               }
>                 yank_delete(p, q, WHOLE, YANKONLY, NO_UNDO);    // save copy before change
>                 p = begin_line(p);
>                 q = end_line(q);
> --
> 2.30.2
>
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic