aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDerek Buitenhuis <derek.buitenhuis@gmail.com>2017-07-14 15:32:42 +0100
committerDerek Buitenhuis <derek.buitenhuis@gmail.com>2017-07-16 16:09:17 +0100
commita27c412795c2147e71c5b10782c97a15bf9dc81f (patch)
tree2ab4853ca3f16e18d1f0329d01df171443f266dc
parentba4beaf6149f7241c8bd85fe853318c2f6837ad0 (diff)
downloadffmpeg-a27c412795c2147e71c5b10782c97a15bf9dc81f.tar.gz
webmdashenc: Fix memory leak
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
-rw-r--r--libavformat/webmdashenc.c38
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;
}
/*