Browse Source

lavu: Check av_dict_set allocations

Bug-Id: CID 1257772
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
tags/n2.6
Luca Barbato Vittorio Giovara 10 years ago
parent
commit
1279221cc4
1 changed files with 11 additions and 6 deletions
  1. +11
    -6
      libavutil/dict.c

+ 11
- 6
libavutil/dict.c View File

@@ -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)


Loading…
Cancel
Save