Browse code

avutil/opt: check for and handle errors in av_opt_set_dict2()

Previously errors could result in random entries to be lost.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
(cherry picked from commit f3ace85d8869c3dddd2d28d064002d0d912e3624)

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>

Michael Niedermayer authored on 2016/01/24 11:42:46
Showing 1 changed files
... ...
@@ -1468,10 +1468,11 @@ int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags)
1468 1468
     while ((t = av_dict_get(*options, "", t, AV_DICT_IGNORE_SUFFIX))) {
1469 1469
         ret = av_opt_set(obj, t->key, t->value, search_flags);
1470 1470
         if (ret == AVERROR_OPTION_NOT_FOUND)
1471
-            av_dict_set(&tmp, t->key, t->value, 0);
1472
-        else if (ret < 0) {
1471
+            ret = av_dict_set(&tmp, t->key, t->value, 0);
1472
+        if (ret < 0) {
1473 1473
             av_log(obj, AV_LOG_ERROR, "Error setting option %s to value %s.\n", t->key, t->value);
1474
-            break;
1474
+            av_dict_free(&tmp);
1475
+            return ret;
1475 1476
         }
1476 1477
         ret = 0;
1477 1478
     }