On Tue, Dec 16, 2014 at 1:21 PM, Luca Barbato <[email protected]> wrote: > --- > > It does not free the dictionary if it wasn't just allocated. > > > libavutil/dict.c | 17 +++++++++++------ > 1 file changed, 11 insertions(+), 6 deletions(-) > > diff --git a/libavutil/dict.c b/libavutil/dict.c > index e4ea776..7f48320 100644 > --- a/libavutil/dict.c > +++ b/libavutil/dict.c > @@ -71,9 +71,12 @@ int av_dict_set(AVDictionary **pm, const char *key, const > char *value, > AVDictionary *m = *pm; > AVDictionaryEntry *tag = av_dict_get(m, key, NULL, flags); > char *oldval = NULL; > + int allocated = !!m; > > if (!m) > m = *pm = av_mallocz(sizeof(*m)); > + if (!m) > + return AVERROR(ENOMEM); > > if (tag) { > if (flags & AV_DICT_DONT_OVERWRITE) { > @@ -88,12 +91,14 @@ int av_dict_set(AVDictionary **pm, const char *key, const > char *value, > av_free(tag->key); > *tag = m->elems[--m->count]; > } else { > - AVDictionaryEntry *tmp = av_realloc(m->elems, > - (m->count + 1) * > sizeof(*m->elems)); > - if (tmp) > - m->elems = tmp; > - else > - return AVERROR(ENOMEM); > + int ret = av_reallocp_array(&m->elems, > + m->count + 1, sizeof(*m->elems)); > + if (ret < 0) { > + if (allocated) > + av_freep(pm); > + > + return ret; > + } > } > if (value) { > if (flags & AV_DICT_DONT_STRDUP_KEY) > -- > 2.1.0
This looks good to me. -- Vittorio _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
