git: 5ac4f1e50257 - main - editors/nvi2: Fix core dump when tags file pattern has a trailing '\'
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 03 Nov 2022 06:41:59 UTC
The branch main has been updated by leres:
URL: https://cgit.FreeBSD.org/ports/commit/?id=5ac4f1e502572cd1e2e8678600a56b3894af2e95
commit 5ac4f1e502572cd1e2e8678600a56b3894af2e95
Author: Craig Leres <leres@FreeBSD.org>
AuthorDate: 2022-11-03 06:41:34 +0000
Commit: Craig Leres <leres@FreeBSD.org>
CommitDate: 2022-11-03 06:41:34 +0000
editors/nvi2: Fix core dump when tags file pattern has a trailing '\'
If you create a tags file of a macro that ends with a '\' and tag
for it, vi dumps core. For example:
zinc 76 % cat test.h
#define LATIN2PLAIN(ch) (((u_char)ch) >= 0x80 ? \
pgm_read_byte_far(pgm_get_far_address(latin2plain) + \
(((u_char)ch) - 0x80)) : (isprint(ch) ? (ch) : '_'))
zinc 77 % ctags test.h
zinc 78 % vi -t LATIN2PLAIN
Segmentation fault
The problem is that the loop variable is unsigned (size_t) and it
gets decremented twice: 1 -> 0 -> 4294967295
Apply the upstream patch to solve this:
https://github.com/lichray/nvi2/pull/111
---
editors/nvi2/Makefile | 1 +
editors/nvi2/files/patch-ex_ex__subst.c | 12 ++++++++++++
2 files changed, 13 insertions(+)
diff --git a/editors/nvi2/Makefile b/editors/nvi2/Makefile
index d9f955eb7d57..dfa27945a477 100644
--- a/editors/nvi2/Makefile
+++ b/editors/nvi2/Makefile
@@ -1,6 +1,7 @@
PORTNAME= nvi2
PORTVERSION= 2.2.0
DISTVERSIONPREFIX= v
+PORTREVISION= 1
CATEGORIES= editors
MAINTAINER= leres@FreeBSD.org
diff --git a/editors/nvi2/files/patch-ex_ex__subst.c b/editors/nvi2/files/patch-ex_ex__subst.c
new file mode 100644
index 000000000000..6ff00423160c
--- /dev/null
+++ b/editors/nvi2/files/patch-ex_ex__subst.c
@@ -0,0 +1,12 @@
+--- ex/ex_subst.c.orig 2020-08-01 22:27:51 UTC
++++ ex/ex_subst.c
+@@ -1194,7 +1194,8 @@ re_tag_conv(SCR *sp, CHAR_T **ptrnp, size_t *plenp, in
+ for (; len > 0; --len) {
+ if (p[0] == '\\' && (p[1] == '/' || p[1] == '?')) {
+ ++p;
+- --len;
++ if (len > 1)
++ --len;
+ } else if (STRCHR(L("^.[]$*"), p[0]))
+ *t++ = '\\';
+ *t++ = *p++;