]> git.sesse.net Git - ffmpeg/blobdiff - libavutil/dict.c
x86/swr: add missing alignment check to pack_6ch functions
[ffmpeg] / libavutil / dict.c
index 2983ea57a949df1ddf4ea5691f28fcbd98ab4806..0d54c7970ad697410673d68f10b8cef3caabe2e5 100644 (file)
@@ -75,6 +75,8 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value,
 
     if (!m)
         m = *pm = av_mallocz(sizeof(*m));
+    if (!m)
+        goto err_out;
 
     if (tag) {
         if (flags & AV_DICT_DONT_OVERWRITE) {
@@ -100,6 +102,8 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value,
             m->elems[m->count].key = (char*)(intptr_t)key;
         else
             m->elems[m->count].key = av_strdup(key);
+        if (!m->elems[m->count].key)
+            goto err_out;
         if (flags & AV_DICT_DONT_STRDUP_VAL) {
             m->elems[m->count].value = (char*)(intptr_t)value;
         } else if (oldval && flags & AV_DICT_APPEND) {
@@ -116,15 +120,15 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value,
         m->count++;
     }
     if (!m->count) {
-        av_free(m->elems);
+        av_freep(&m->elems);
         av_freep(pm);
     }
 
     return 0;
 
 err_out:
-    if (!m->count) {
-        av_free(m->elems);
+    if (m && !m->count) {
+        av_freep(&m->elems);
         av_freep(pm);
     }
     if (flags & AV_DICT_DONT_STRDUP_KEY) av_free((void*)key);
@@ -193,10 +197,10 @@ void av_dict_free(AVDictionary **pm)
 
     if (m) {
         while (m->count--) {
-            av_free(m->elems[m->count].key);
-            av_free(m->elems[m->count].value);
+            av_freep(&m->elems[m->count].key);
+            av_freep(&m->elems[m->count].value);
         }
-        av_free(m->elems);
+        av_freep(&m->elems);
     }
     av_freep(pm);
 }