Hi,
Issuing the following commands to delete a backwards sentence will trigger a
segfault on vi(1):
echo "\nfoo" > a && vi a
d(
The patch below from rin@NetBSD, via nvi2 project, fixes it.
OK?
Index: common/delete.c
===================================================================
RCS file: /cvs/src/usr.bin/vi/common/delete.c,v
retrieving revision 1.11
diff -u -p -u -r1.11 delete.c
--- common/delete.c 6 Jan 2016 22:28:52 -0000 1.11
+++ common/delete.c 23 Nov 2017 12:52:38 -0000
@@ -87,14 +87,16 @@ del(SCR *sp, MARK *fm, MARK *tm, int lmo
if (tm->lno == fm->lno) {
if (db_get(sp, fm->lno, DBG_FATAL, &p, &len))
return (1);
- GET_SPACE_RET(sp, bp, blen, len);
- if (fm->cno != 0)
- memcpy(bp, p, fm->cno);
- memcpy(bp + fm->cno, p + (tm->cno + 1), len - (tm->cno + 1));
- if (db_set(sp, fm->lno,
- bp, len - ((tm->cno - fm->cno) + 1)))
- goto err;
- goto done;
+ if (len != 0) {
+ GET_SPACE_RET(sp, bp, blen, len);
+ if (fm->cno != 0)
+ memcpy(bp, p, fm->cno);
+ memcpy(bp + fm->cno, p + (tm->cno + 1), len - (tm->cno
+ 1));
+ if (db_set(sp, fm->lno,
+ bp, len - ((tm->cno - fm->cno) + 1)))
+ goto err;
+ goto done;
+ }
}
/*