about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2022-03-12 20:17:28 -0500
committerJune McEnroe <june@causal.agency>2022-03-12 20:17:28 -0500
commitace9d8cadb7bf985efed16ce6de6ee04dba3879e (patch)
tree81f32b727f691db3d1981a669e1de98266b6c0dc
parentImplement $, 0, A, I, a (diff)
downloadcatgirl-ace9d8cadb7bf985efed16ce6de6ee04dba3879e.tar.gz
catgirl-ace9d8cadb7bf985efed16ce6de6ee04dba3879e.zip
Fix r on empty buffer
Diffstat (limited to '')
-rw-r--r--edit.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/edit.c b/edit.c
index 15188a6..4a2008d 100644
--- a/edit.c
+++ b/edit.c
@@ -235,7 +235,7 @@ static int viInsert(struct Edit *e, wchar_t ch) {
 		if (!isvalid(ch)) return -1;
 		e->buf[e->pos] = ch;
 		e->pos++;
-	} else if (e->vi.verb == 'r' && e->pos < e->len) {
+	} else if (e->vi.verb == 'r') {
 		if (!isvalid(ch)) return -1;
 		size_t pos = e->pos;
 		for (unsigned i = 0; i < (e->vi.count ?: 1); ++i) {
@@ -433,6 +433,9 @@ int main(void) {
 	assert(eq(&e, "y\0yo"));
 	vi(&e, "3rz");
 	assert(eq(&e, "yz\0z"));
+	fix(&e, "");
+	vi(&e, "\33rx");
+	assert(eq(&e, "\0"));
 
 	fix(&e, "foo bar");
 	vi(&e, "\0330");