diff --git a/libavformat/webmdashenc.c b/libavformat/webmdashenc.c index 550ad72e4d..1280d8a763 100644 --- a/libavformat/webmdashenc.c +++ b/libavformat/webmdashenc.c @@ -288,33 +288,55 @@ static int parse_filename(char *filename, char **representation_id, char *period_pos = NULL; char *temp_pos = NULL; char *filename_str = av_strdup(filename); - if (!filename_str) return AVERROR(ENOMEM); + int ret = 0; + + if (!filename_str) { + ret = AVERROR(ENOMEM); + goto end; + } temp_pos = av_stristr(filename_str, "_"); while (temp_pos) { underscore_pos = temp_pos + 1; temp_pos = av_stristr(temp_pos + 1, "_"); } - if (!underscore_pos) return AVERROR_INVALIDDATA; + if (!underscore_pos) { + ret = AVERROR_INVALIDDATA; + goto end; + } period_pos = av_stristr(underscore_pos, "."); - if (!period_pos) return AVERROR_INVALIDDATA; + if (!period_pos) { + ret = AVERROR_INVALIDDATA; + goto end; + } *(underscore_pos - 1) = 0; if (representation_id) { *representation_id = av_malloc(period_pos - underscore_pos + 1); - if (!(*representation_id)) return AVERROR(ENOMEM); + if (!(*representation_id)) { + ret = AVERROR(ENOMEM); + goto end; + } av_strlcpy(*representation_id, underscore_pos, period_pos - underscore_pos + 1); } if (initialization_pattern) { *initialization_pattern = av_asprintf("%s_$RepresentationID$.hdr", filename_str); - if (!(*initialization_pattern)) return AVERROR(ENOMEM); + if (!(*initialization_pattern)) { + ret = AVERROR(ENOMEM); + goto end; + } } if (media_pattern) { *media_pattern = av_asprintf("%s_$RepresentationID$_$Number$.chk", filename_str); - if (!(*media_pattern)) return AVERROR(ENOMEM); + if (!(*media_pattern)) { + ret = AVERROR(ENOMEM); + goto end; + } } - av_free(filename_str); - return 0; + +end: + av_freep(&filename_str); + return ret; } /*