diff options
author | Derek Buitenhuis <derek.buitenhuis@gmail.com> | 2017-07-14 15:32:42 +0100 |
---|---|---|
committer | Derek Buitenhuis <derek.buitenhuis@gmail.com> | 2017-07-16 16:09:17 +0100 |
commit | a27c412795c2147e71c5b10782c97a15bf9dc81f (patch) | |
tree | 2ab4853ca3f16e18d1f0329d01df171443f266dc | |
parent | ba4beaf6149f7241c8bd85fe853318c2f6837ad0 (diff) | |
download | ffmpeg-a27c412795c2147e71c5b10782c97a15bf9dc81f.tar.gz |
webmdashenc: Fix memory leak
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
-rw-r--r-- | libavformat/webmdashenc.c | 38 |
1 files changed, 30 insertions, 8 deletions
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; } /* |