[FFmpeg-cvslog] webmdashenc: Fix memory leak
Derek Buitenhuis
git at videolan.org
Sun Jul 16 18:12:36 EEST 2017
ffmpeg | branch: master | Derek Buitenhuis <derek.buitenhuis at gmail.com> | Fri Jul 14 15:32:42 2017 +0100| [a27c412795c2147e71c5b10782c97a15bf9dc81f] | committer: Derek Buitenhuis
webmdashenc: Fix memory leak
Signed-off-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a27c412795c2147e71c5b10782c97a15bf9dc81f
---
libavformat/webmdashenc.c | 38 ++++++++++++++++++++++++++++++--------
1 file 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;
}
/*
More information about the ffmpeg-cvslog
mailing list