vi: deal with invalid movements in shift commands
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>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
a25b4c2c42
commit
24198f652f
@ -7,7 +7,6 @@
|
|||||||
*/
|
*/
|
||||||
//
|
//
|
||||||
//Things To Do:
|
//Things To Do:
|
||||||
// EXINIT
|
|
||||||
// $HOME/.exrc and ./.exrc
|
// $HOME/.exrc and ./.exrc
|
||||||
// add magic to search /foo.*bar
|
// add magic to search /foo.*bar
|
||||||
// add :help command
|
// add :help command
|
||||||
@ -3574,7 +3573,10 @@ static void do_cmd(int c)
|
|||||||
case '>': // >- Right shift something
|
case '>': // >- Right shift something
|
||||||
cnt = count_lines(text, dot); // remember what line we are on
|
cnt = count_lines(text, dot); // remember what line we are on
|
||||||
c1 = get_motion_char(); // get the type of thing to operate 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
|
yank_delete(p, q, WHOLE, YANKONLY, NO_UNDO); // save copy before change
|
||||||
p = begin_line(p);
|
p = begin_line(p);
|
||||||
q = end_line(q);
|
q = end_line(q);
|
||||||
|
Loading…
Reference in New Issue
Block a user