Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.busybox.net/busybox.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2023-01-02 19:05:55 +0300
committerDenys Vlasenko <vda.linux@googlemail.com>2023-01-02 19:05:55 +0300
commit9b2d766e0ecb222d25a43333287835452e43f8a9 (patch)
tree6750470dd6f12037765011745d0bc3efb9f1fc72
parentcadf57b3afac5f77c75516d82aed4bc845b5d704 (diff)
sed: fix double-free in FEATURE_CLEAN_UP=y configs
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--editors/sed.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/editors/sed.c b/editors/sed.c
index 32a4b61f6..00dde60be 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -99,7 +99,7 @@ enum {
struct sed_FILE {
struct sed_FILE *next; /* Next (linked list, NULL terminated) */
- const char *fname;
+ char *fname;
FILE *fp;
};
@@ -188,9 +188,6 @@ static void sed_free_and_close_stuff(void)
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 @@ static void sed_free_and_close_stuff(void)
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);