40 lines
1.1 KiB
Diff
40 lines
1.1 KiB
Diff
From ba8e66de6de30fabc9e529882b5f408b188a296a Mon Sep 17 00:00:00 2001
|
|
From: Assaf Gordon <assafgordon@gmail.com>
|
|
Date: Tue, 31 Jul 2018 11:25:35 -0600
|
|
Subject: [PATCH 23/61] sed: fix memory leak
|
|
|
|
* sed/regexp.c (match_regex): Free the previously allocated regex struct
|
|
before re-building the regex during program execution.
|
|
---
|
|
sed/regexp.c | 14 +++++++++++++-
|
|
1 file changed, 13 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/sed/regexp.c b/sed/regexp.c
|
|
index 2801d6f..b3a4b41 100644
|
|
--- a/sed/regexp.c
|
|
+++ b/sed/regexp.c
|
|
@@ -269,7 +269,19 @@ match_regex (struct regex *regex, char *buf, size_t buflen,
|
|
return (ret == 0);
|
|
#else
|
|
if (regex->pattern.no_sub && regsize)
|
|
- compile_regex_1 (regex, regsize);
|
|
+ {
|
|
+ /* Re-compiling an existing regex, free the previously allocated
|
|
+ structures. */
|
|
+ if (regex->dfa)
|
|
+ {
|
|
+ dfafree (regex->dfa);
|
|
+ free (regex->dfa);
|
|
+ regex->dfa = NULL;
|
|
+ }
|
|
+ regfree (®ex->pattern);
|
|
+
|
|
+ compile_regex_1 (regex, regsize);
|
|
+ }
|
|
|
|
regex->pattern.regs_allocated = REGS_REALLOCATE;
|
|
|
|
--
|
|
2.19.1
|
|
|