sed: fix double-free in FEATURE_CLEAN_UP=y configs
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/editors/sed.c b/editors/sed.c
index 32a4b61..00dde60 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -99,7 +99,7 @@
struct sed_FILE {
struct sed_FILE *next; /* Next (linked list, NULL terminated) */
- const char *fname;
+ char *fname;
FILE *fp;
};
@@ -188,9 +188,6 @@
while (sed_cmd) {
sed_cmd_t *sed_cmd_next = sed_cmd->next;
- if (sed_cmd->sw_file)
- fclose(sed_cmd->sw_file);
-
/* Used to free regexps, but now there is code
* in get_address() which can reuse a regexp
* for constructs as /regexp/cmd1;//cmd2
@@ -217,6 +214,18 @@
if (G.current_fp)
fclose(G.current_fp);
+
+ if (G.FILE_head) {
+ struct sed_FILE *cur = G.FILE_head;
+ do {
+ struct sed_FILE *p;
+ fclose(cur->fp);
+ free(cur->fname);
+ p = cur;
+ cur = cur->next;
+ free(p);
+ } while (cur);
+ }
}
#else
void sed_free_and_close_stuff(void);