[FFmpeg-devel] [PATCH] avformat/hlsenc: fix memleak in hlsenc

Steven Liu lingjiujianke at gmail.com
Thu Jan 5 10:43:32 EET 2017


2017-01-05 15:47 GMT+08:00 Bodecs Bela <bodecsb at vivanet.hu>:

>
>
> 2017.01.05. 1:20 keltezéssel, Steven Liu írta:
>
>> fix CID: 1398364 Resource leak
>> refine the code of the new options
>>
>> Signed-off-by: Steven Liu <lq at chinaffmpeg.org>
>> ---
>>   libavformat/hlsenc.c | 21 +++++++++++++--------
>>   1 file changed, 13 insertions(+), 8 deletions(-)
>>
>> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
>> index 808a797..feeb853 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));
>> +        char * filename = av_strdup(hls->avf->filename);  // %%s will
>> be %s after strftime
>> +        if (!filename) {
>> +            av_free(old_filename);
>> +            av_free(en);
>> +            return AVERROR(ENOMEM);
>> +        }
>>           if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_SIZE) {
>> -            char * filename = av_strdup(hls->avf->filename);  // %%s
>> will be %s after strftime
>> -            if (!filename)
>> -                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,11 @@ 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)
>> -                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,10 +479,11 @@ 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);
>>           }
>> +        av_free(filename);
>>           ff_rename(old_filename, hls->avf->filename, hls);
>>           av_free(old_filename);
>>       }
>>
> if you remove av_strdup after if branch,  this way if
>
> HLS_SECOND_LEVEL_SEGMENT_SIZE and HLS_SECOND_LEVEL_SEGMENT_DURATION also
> set, only later one will applied because filename will be the original one
> in second if branch.
>
> bb
>
>
> new patch update.

> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-avformat-hlsenc-fix-memleak-in-hlsenc.patch
Type: application/octet-stream
Size: 2912 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20170105/a3d9f7a2/attachment.obj>


More information about the ffmpeg-devel mailing list