[FFmpeg-cvslog] avformat/hlsenc: fix memleak in hlsenc
Steven Liu
git at videolan.org
Thu Jan 5 11:09:13 EET 2017
ffmpeg | branch: master | Steven Liu <lq at chinaffmpeg.org> | Thu Jan 5 17:08:09 2017 +0800| [93593674bc8d85a40e0648f21a7cdbf3554f21ff] | committer: Steven Liu
avformat/hlsenc: fix memleak in hlsenc
fix CID: 1398364 Resource leak
refine the code of the new options
Reviewed-by: Bodecs Bela <bodecsb at vivanet.hu>
Signed-off-by: Steven Liu <lq at chinaffmpeg.org>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=93593674bc8d85a40e0648f21a7cdbf3554f21ff
---
libavformat/hlsenc.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index 808a797..eac8308 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -446,11 +446,18 @@ static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls, double
if ((hls->flags & (HLS_SECOND_LEVEL_SEGMENT_SIZE | HLS_SECOND_LEVEL_SEGMENT_DURATION)) &&
strlen(hls->current_segment_final_filename_fmt)) {
char * old_filename = av_strdup(hls->avf->filename); // %%s will be %s after strftime
+ if (!old_filename) {
+ av_free(en);
+ return AVERROR(ENOMEM);
+ }
av_strlcpy(hls->avf->filename, hls->current_segment_final_filename_fmt, sizeof(hls->avf->filename));
if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_SIZE) {
char * filename = av_strdup(hls->avf->filename); // %%s will be %s after strftime
- if (!filename)
+ if (!filename) {
+ av_free(old_filename);
+ av_free(en);
return AVERROR(ENOMEM);
+ }
if (replace_int_data_in_filename(hls->avf->filename, sizeof(hls->avf->filename),
filename, 's', pos + size) < 1) {
av_log(hls, AV_LOG_ERROR,
@@ -459,14 +466,18 @@ static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls, double
filename);
av_free(filename);
av_free(old_filename);
+ av_free(en);
return AVERROR(EINVAL);
}
av_free(filename);
}
if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_DURATION) {
char * filename = av_strdup(hls->avf->filename); // %%t will be %t after strftime
- if (!filename)
+ if (!filename) {
+ av_free(old_filename);
+ av_free(en);
return AVERROR(ENOMEM);
+ }
if (replace_int_data_in_filename(hls->avf->filename, sizeof(hls->avf->filename),
filename, 't', (int64_t)round(1000000 * duration)) < 1) {
av_log(hls, AV_LOG_ERROR,
@@ -475,6 +486,7 @@ static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls, double
filename);
av_free(filename);
av_free(old_filename);
+ av_free(en);
return AVERROR(EINVAL);
}
av_free(filename);
More information about the ffmpeg-cvslog
mailing list