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;                                                       \
 }
 
 /*

Reply via email to