From 1619274fb393f55a365cc10f88faa173c9a8e772 Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Sun, 8 Jun 2014 17:53:31 +0200 Subject: av_dict_set: fix potential memory leak with AV_DICT_DONT_OVERWRITE av_dict_set leaks it key/value arguments if AV_DICT_DONT_OVERWRITE is combined with AV_DICT_DONT_STRDUP_{KEY,VAL} and the key exists. --- libavutil/dict.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'libavutil') diff --git a/libavutil/dict.c b/libavutil/dict.c index 7b4dbf29ac..e4ea7769e0 100644 --- a/libavutil/dict.c +++ b/libavutil/dict.c @@ -76,8 +76,11 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value, m = *pm = av_mallocz(sizeof(*m)); if (tag) { - if (flags & AV_DICT_DONT_OVERWRITE) + if (flags & AV_DICT_DONT_OVERWRITE) { + if (flags & AV_DICT_DONT_STRDUP_KEY) av_free(key); + if (flags & AV_DICT_DONT_STRDUP_VAL) av_free(value); return 0; + } if (flags & AV_DICT_APPEND) oldval = tag->value; else -- cgit v1.2.3