mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-11-01 04:53:04 +08:00 
			
		
		
		
	Merge commit 'b1306823d0b3ae998c8e10ad832004eb13bdd93e'
* commit 'b1306823d0b3ae998c8e10ad832004eb13bdd93e': check memory errors from av_strdup() Conflicts: avprobe.c libavformat/matroskaenc.c libavutil/opt.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
							
								
								
									
										10
									
								
								cmdutils.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								cmdutils.c
									
									
									
									
									
								
							| @@ -290,10 +290,14 @@ static int write_option(void *optctx, const OptionDef *po, const char *opt, | |||||||
|     if (po->flags & OPT_SPEC) { |     if (po->flags & OPT_SPEC) { | ||||||
|         SpecifierOpt **so = dst; |         SpecifierOpt **so = dst; | ||||||
|         char *p = strchr(opt, ':'); |         char *p = strchr(opt, ':'); | ||||||
|  |         char *str; | ||||||
|  |  | ||||||
|         dstcount = (int *)(so + 1); |         dstcount = (int *)(so + 1); | ||||||
|         *so = grow_array(*so, sizeof(**so), dstcount, *dstcount + 1); |         *so = grow_array(*so, sizeof(**so), dstcount, *dstcount + 1); | ||||||
|         (*so)[*dstcount - 1].specifier = av_strdup(p ? p + 1 : ""); |         str = av_strdup(p ? p + 1 : ""); | ||||||
|  |         if (!str) | ||||||
|  |             return AVERROR(ENOMEM); | ||||||
|  |         (*so)[*dstcount - 1].specifier = str; | ||||||
|         dst = &(*so)[*dstcount - 1].u; |         dst = &(*so)[*dstcount - 1].u; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -301,6 +305,8 @@ static int write_option(void *optctx, const OptionDef *po, const char *opt, | |||||||
|         char *str; |         char *str; | ||||||
|         str = av_strdup(arg); |         str = av_strdup(arg); | ||||||
|         av_freep(dst); |         av_freep(dst); | ||||||
|  |         if (!str) | ||||||
|  |             return AVERROR(ENOMEM); | ||||||
|         *(char **)dst = str; |         *(char **)dst = str; | ||||||
|     } else if (po->flags & OPT_BOOL || po->flags & OPT_INT) { |     } else if (po->flags & OPT_BOOL || po->flags & OPT_INT) { | ||||||
|         *(int *)dst = parse_number_or_die(opt, arg, OPT_INT64, INT_MIN, INT_MAX); |         *(int *)dst = parse_number_or_die(opt, arg, OPT_INT64, INT_MIN, INT_MAX); | ||||||
| @@ -1816,6 +1822,8 @@ int show_help(void *optctx, const char *opt, const char *arg) | |||||||
|     av_log_set_callback(log_callback_help); |     av_log_set_callback(log_callback_help); | ||||||
|  |  | ||||||
|     topic = av_strdup(arg ? arg : ""); |     topic = av_strdup(arg ? arg : ""); | ||||||
|  |     if (!topic) | ||||||
|  |         return AVERROR(ENOMEM); | ||||||
|     par = strchr(topic, '='); |     par = strchr(topic, '='); | ||||||
|     if (par) |     if (par) | ||||||
|         *par++ = 0; |         *par++ = 0; | ||||||
|   | |||||||
| @@ -231,6 +231,8 @@ static int opt_map(void *optctx, const char *opt, const char *arg) | |||||||
|         arg++; |         arg++; | ||||||
|     } |     } | ||||||
|     map = av_strdup(arg); |     map = av_strdup(arg); | ||||||
|  |     if (!map) | ||||||
|  |         return AVERROR(ENOMEM); | ||||||
|  |  | ||||||
|     /* parse sync stream first, just pick first matching stream */ |     /* parse sync stream first, just pick first matching stream */ | ||||||
|     if (sync = strchr(map, ',')) { |     if (sync = strchr(map, ',')) { | ||||||
|   | |||||||
| @@ -1084,13 +1084,16 @@ static int mkv_write_chapters(AVFormatContext *s) | |||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| static void mkv_write_simpletag(AVIOContext *pb, AVDictionaryEntry *t) | static int mkv_write_simpletag(AVIOContext *pb, AVDictionaryEntry *t) | ||||||
| { | { | ||||||
|     uint8_t *key = av_strdup(t->key); |     uint8_t *key = av_strdup(t->key); | ||||||
|     uint8_t *p   = key; |     uint8_t *p   = key; | ||||||
|     const uint8_t *lang = NULL; |     const uint8_t *lang = NULL; | ||||||
|     ebml_master tag; |     ebml_master tag; | ||||||
|  |  | ||||||
|  |     if (!key) | ||||||
|  |         return AVERROR(ENOMEM); | ||||||
|  |  | ||||||
|     if ((p = strrchr(p, '-')) && |     if ((p = strrchr(p, '-')) && | ||||||
|         (lang = av_convert_lang_to(p + 1, AV_LANG_ISO639_2_BIBL))) |         (lang = av_convert_lang_to(p + 1, AV_LANG_ISO639_2_BIBL))) | ||||||
|         *p = 0; |         *p = 0; | ||||||
| @@ -1112,6 +1115,7 @@ static void mkv_write_simpletag(AVIOContext *pb, AVDictionaryEntry *t) | |||||||
|     end_ebml_master(pb, tag); |     end_ebml_master(pb, tag); | ||||||
|  |  | ||||||
|     av_freep(&key); |     av_freep(&key); | ||||||
|  |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| static int mkv_write_tag(AVFormatContext *s, AVDictionary *m, unsigned int elementid, | static int mkv_write_tag(AVFormatContext *s, AVDictionary *m, unsigned int elementid, | ||||||
| @@ -1135,11 +1139,15 @@ static int mkv_write_tag(AVFormatContext *s, AVDictionary *m, unsigned int eleme | |||||||
|         put_ebml_uint(s->pb, elementid, uid); |         put_ebml_uint(s->pb, elementid, uid); | ||||||
|     end_ebml_master(s->pb, targets); |     end_ebml_master(s->pb, targets); | ||||||
|  |  | ||||||
|     while ((t = av_dict_get(m, "", t, AV_DICT_IGNORE_SUFFIX))) |     while ((t = av_dict_get(m, "", t, AV_DICT_IGNORE_SUFFIX))) { | ||||||
|         if (av_strcasecmp(t->key, "title") && |         if (av_strcasecmp(t->key, "title") && | ||||||
|             av_strcasecmp(t->key, "stereo_mode") && |             av_strcasecmp(t->key, "stereo_mode") && | ||||||
|             av_strcasecmp(t->key, "encoding_tool")) |             av_strcasecmp(t->key, "encoding_tool")) { | ||||||
|             mkv_write_simpletag(s->pb, t); |             ret = mkv_write_simpletag(s->pb, t); | ||||||
|  |             if (ret < 0) | ||||||
|  |                 return ret; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     end_ebml_master(s->pb, tag); |     end_ebml_master(s->pb, tag); | ||||||
|     return 0; |     return 0; | ||||||
|   | |||||||
| @@ -162,7 +162,7 @@ static int set_string(void *obj, const AVOption *o, const char *val, uint8_t **d | |||||||
| { | { | ||||||
|     av_freep(dst); |     av_freep(dst); | ||||||
|     *dst = av_strdup(val); |     *dst = av_strdup(val); | ||||||
|     return 0; |     return *dst ? 0 : AVERROR(ENOMEM); | ||||||
| } | } | ||||||
|  |  | ||||||
| #define DEFAULT_NUMVAL(opt) ((opt->type == AV_OPT_TYPE_INT64 || \ | #define DEFAULT_NUMVAL(opt) ((opt->type == AV_OPT_TYPE_INT64 || \ | ||||||
| @@ -711,7 +711,7 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) | |||||||
|             *out_val = av_strdup(*(uint8_t**)dst); |             *out_val = av_strdup(*(uint8_t**)dst); | ||||||
|         else |         else | ||||||
|             *out_val = av_strdup(""); |             *out_val = av_strdup(""); | ||||||
|         return 0; |         return *out_val ? 0 : AVERROR(ENOMEM); | ||||||
|     case AV_OPT_TYPE_BINARY: |     case AV_OPT_TYPE_BINARY: | ||||||
|         len = *(int*)(((uint8_t *)dst) + sizeof(uint8_t *)); |         len = *(int*)(((uint8_t *)dst) + sizeof(uint8_t *)); | ||||||
|         if ((uint64_t)len*2 + 1 > INT_MAX) |         if ((uint64_t)len*2 + 1 > INT_MAX) | ||||||
| @@ -757,7 +757,7 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) | |||||||
|     if (ret >= sizeof(buf)) |     if (ret >= sizeof(buf)) | ||||||
|         return AVERROR(EINVAL); |         return AVERROR(EINVAL); | ||||||
|     *out_val = av_strdup(buf); |     *out_val = av_strdup(buf); | ||||||
|     return 0; |     return *out_val ? 0 : AVERROR(ENOMEM); | ||||||
| } | } | ||||||
|  |  | ||||||
| static int get_number(void *obj, const char *name, const AVOption **o_out, double *num, int *den, int64_t *intnum, | static int get_number(void *obj, const char *name, const AVOption **o_out, double *num, int *den, int64_t *intnum, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Michael Niedermayer
					Michael Niedermayer