From 939f796f086cac17ad0558b36fa87c55a9cb1a22 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 1 Aug 2013 23:40:44 +0100 Subject: [PATCH] Don't leak formats if they are added multiple times. --- format.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/format.c b/format.c index 16ac53d6..2275090e 100644 --- a/format.c +++ b/format.c @@ -151,6 +151,7 @@ void format_add(struct format_tree *ft, const char *key, const char *fmt, ...) { struct format_entry *fe; + struct format_entry *fe_now; va_list ap; fe = xmalloc(sizeof *fe); @@ -160,7 +161,13 @@ format_add(struct format_tree *ft, const char *key, const char *fmt, ...) xvasprintf(&fe->value, fmt, ap); va_end(ap); - RB_INSERT(format_tree, ft, fe); + fe_now = RB_INSERT(format_tree, ft, fe); + if (fe_now != NULL) { + free(fe_now->value); + fe_now->value = fe->value; + free(fe->key); + free(fe); + } } /* Find a format entry. */