Hello tech@,
There's a memory leak in vi in the REALLOC{,ARRAY} macro.
This patch should fix the leak. A similar diff is already
present in FreeBSD's vi.
OK?
martijn@
Index: common/mem.h
===================================================================
RCS file: /cvs/src/usr.bin/vi/common/mem.h,v
retrieving revision 1.8
diff -u -p -r1.8 mem.h
--- common/mem.h 3 Feb 2016 01:47:25 -0000 1.8
+++ common/mem.h 7 May 2016 13:07:43 -0000
@@ -143,13 +143,21 @@
}
#define REALLOC(sp, p, size) {
\
- if (((p) = (realloc((p), (size)))) == NULL) \
+ void *tmpp; \
+ if (((tmpp) = (realloc((p), (size)))) == NULL) { \
msgq((sp), M_SYSERR, NULL); \
+ free(p); \
+ } \
+ p = tmpp; \
}
#define REALLOCARRAY(sp, p, nelem, size) {
\
- if (((p) = (reallocarray((p), (nelem), (size)))) == NULL) \
+ void *tmpp; \
+ if (((tmpp) = (reallocarray((p), (nelem), (size)))) == NULL) { \
msgq((sp), M_SYSERR, NULL); \
+ free(p); \
+ } \
+ p = tmpp; \
}
/*