Module Name: src
Committed By: christos
Date: Tue Jan 26 16:05:18 UTC 2016
Modified Files:
src/lib/libcompat/regexp: regexp.c
Log Message:
PR/50711: David Binderman: Fix memory leak on error
To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/lib/libcompat/regexp/regexp.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libcompat/regexp/regexp.c
diff -u src/lib/libcompat/regexp/regexp.c:1.18 src/lib/libcompat/regexp/regexp.c:1.19
--- src/lib/libcompat/regexp/regexp.c:1.18 Fri Feb 16 11:34:19 2007
+++ src/lib/libcompat/regexp/regexp.c Tue Jan 26 11:05:18 2016
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: regexp.c,v 1.18 2007/02/16 16:34:19 freza Exp $");
+__RCSID("$NetBSD: regexp.c,v 1.19 2016/01/26 16:05:18 christos Exp $");
#endif /* LIBC_SCCS and not lint */
#include <ctype.h>
@@ -236,7 +236,7 @@ const char *expn;
FAIL("regexp too big");
/* Allocate space. */
- r = (regexp *)malloc(sizeof(regexp) + (unsigned)regsize);
+ r = malloc(sizeof(regexp) + (unsigned)regsize);
if (r == NULL)
FAIL("out of space");
@@ -246,8 +246,10 @@ const char *expn;
regnpar = 1;
regcode = r->program;
regc(MAGIC);
- if (reg(0, &flags) == NULL)
+ if (reg(0, &flags) == NULL) {
+ free(r);
return(NULL);
+ }
/* Dig out information for optimizations. */
r->regstart = '\0'; /* Worst-case defaults. */