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>
... | ... |
@@ -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 |
} |