diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2013-08-01 23:40:44 +0100 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2013-08-01 23:40:44 +0100 |
commit | 939f796f086cac17ad0558b36fa87c55a9cb1a22 (patch) | |
tree | 9bd6dc9f9c821a44e3a4d44739019c3f888aed6e | |
parent | 27364345bf68785af58131c47ef46ff081622537 (diff) | |
download | rtmux-939f796f086cac17ad0558b36fa87c55a9cb1a22.tar.gz rtmux-939f796f086cac17ad0558b36fa87c55a9cb1a22.tar.bz2 rtmux-939f796f086cac17ad0558b36fa87c55a9cb1a22.zip |
Don't leak formats if they are added multiple times.
-rw-r--r-- | format.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -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. */ |