[git commit] vi: fix empty line range regression

Denys Vlasenko vda.linux at googlemail.com
Thu Apr 29 23:40:27 UTC 2021


commit: https://git.busybox.net/busybox/commit/?id=0c42a6b072b48ff615e3960ad5829a2a117cc417
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Commit 7a8ceb4eb (vi: changes to line addresses for colon commands)
was supposed to address the issue:

  When the last address is empty it should refer to the current line.

This was intended to allow ranges of the form '1,' with an empty
last address.  It should have been expressed as:

  When the last address is empty *and the second last isn't* it
  should refer to the current line.

Otherwise a command like ':w' only writes the current line resulting
in serious loss of data.

function                                             old     new   delta
colon                                               3906    3911      +5
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 5/0)                 Total: 5 bytes

Signed-off-by: Ron Yorston <rmy at pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 editors/vi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/editors/vi.c b/editors/vi.c
index 6a879fa8a..edcf84240 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -2553,7 +2553,7 @@ static char *get_address(char *p, int *b, int *e)
 				break;
 			state = GET_SEPARATOR;
 		} else {
-			if (state == GET_SEPARATOR && *e < 0)
+			if (state == GET_SEPARATOR && *b >= 0 && *e < 0)
 				*e = count_lines(text, dot);
 			break;
 		}


More information about the busybox-cvs mailing list