You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	libavutil/opt: fix memory leak after av_dict_parse_string fail
In case of failure, all the successfully set entries are stored in *pm. We need to manually free the created dictionary to avoid memory leak. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
This commit is contained in:
		| @@ -452,8 +452,10 @@ static int set_string_dict(void *obj, const AVOption *o, const char *val, uint8_ | ||||
|  | ||||
|     if (val) { | ||||
|         int ret = av_dict_parse_string(&options, val, "=", ":", 0); | ||||
|         if (ret < 0) | ||||
|         if (ret < 0) { | ||||
|             av_dict_free(&options); | ||||
|             return ret; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     av_dict_free((AVDictionary **)dst); | ||||
| @@ -2006,8 +2008,10 @@ int av_opt_is_set_to_default(void *obj, const AVOption *o) | ||||
|         AVDictionaryEntry *en1 = NULL; | ||||
|         AVDictionaryEntry *en2 = NULL; | ||||
|         ret = av_dict_parse_string(&dict1, o->default_val.str, "=", ":", 0); | ||||
|         if (ret < 0) | ||||
|         if (ret < 0) { | ||||
|             av_dict_free(&dict1); | ||||
|             return ret; | ||||
|         } | ||||
|         do { | ||||
|             en1 = av_dict_get(dict1, "", en1, AV_DICT_IGNORE_SUFFIX); | ||||
|             en2 = av_dict_get(dict2, "", en2, AV_DICT_IGNORE_SUFFIX); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user