Commit 93593674 authored by Steven Liu's avatar Steven Liu

avformat/hlsenc: fix memleak in hlsenc

fix CID: 1398364 Resource leak
refine the code of the new options
Reviewed-by: 's avatarBodecs Bela <bodecsb@vivanet.hu>
Signed-off-by: 's avatarSteven Liu <lq@chinaffmpeg.org>
parent 8c9c43fc
...@@ -446,11 +446,18 @@ static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls, double ...@@ -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)) && if ((hls->flags & (HLS_SECOND_LEVEL_SEGMENT_SIZE | HLS_SECOND_LEVEL_SEGMENT_DURATION)) &&
strlen(hls->current_segment_final_filename_fmt)) { strlen(hls->current_segment_final_filename_fmt)) {
char * old_filename = av_strdup(hls->avf->filename); // %%s will be %s after strftime 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)); av_strlcpy(hls->avf->filename, hls->current_segment_final_filename_fmt, sizeof(hls->avf->filename));
if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_SIZE) { if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_SIZE) {
char * filename = av_strdup(hls->avf->filename); // %%s will be %s after strftime 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); return AVERROR(ENOMEM);
}
if (replace_int_data_in_filename(hls->avf->filename, sizeof(hls->avf->filename), if (replace_int_data_in_filename(hls->avf->filename, sizeof(hls->avf->filename),
filename, 's', pos + size) < 1) { filename, 's', pos + size) < 1) {
av_log(hls, AV_LOG_ERROR, av_log(hls, AV_LOG_ERROR,
...@@ -459,14 +466,18 @@ static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls, double ...@@ -459,14 +466,18 @@ static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls, double
filename); filename);
av_free(filename); av_free(filename);
av_free(old_filename); av_free(old_filename);
av_free(en);
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
av_free(filename); av_free(filename);
} }
if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_DURATION) { if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_DURATION) {
char * filename = av_strdup(hls->avf->filename); // %%t will be %t after strftime 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); return AVERROR(ENOMEM);
}
if (replace_int_data_in_filename(hls->avf->filename, sizeof(hls->avf->filename), if (replace_int_data_in_filename(hls->avf->filename, sizeof(hls->avf->filename),
filename, 't', (int64_t)round(1000000 * duration)) < 1) { filename, 't', (int64_t)round(1000000 * duration)) < 1) {
av_log(hls, AV_LOG_ERROR, av_log(hls, AV_LOG_ERROR,
...@@ -475,6 +486,7 @@ static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls, double ...@@ -475,6 +486,7 @@ static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls, double
filename); filename);
av_free(filename); av_free(filename);
av_free(old_filename); av_free(old_filename);
av_free(en);
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
av_free(filename); av_free(filename);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment