ffmpeg | branch: master | Luca Barbato <lu_z...@gentoo.org> | Tue Dec 16 14:21:20 2014 +0100| [1279221cc4d63bc4449df86ae7a98e633f8be425] | committer: Vittorio Giovara
lavu: Check av_dict_set allocations Bug-Id: CID 1257772 Signed-off-by: Vittorio Giovara <vittorio.giov...@gmail.com> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1279221cc4d63bc4449df86ae7a98e633f8be425 --- 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) _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog