[FFmpeg-devel] Memory leaks in libavformat/segment.c
Lvqier
lvqier at gmail.com
Tue Dec 8 12:29:13 CET 2015
On 12/8/15 7:05 PM, Hendrik Leppkes wrote:
> On Tue, Dec 8, 2015 at 11:46 AM, Lvqier <lvqier at gmail.com> wrote:
>> On 12/8/15 6:26 PM, Hendrik Leppkes wrote:
>>> On Tue, Dec 8, 2015 at 11:19 AM, Lvqier <lvqier at gmail.com> wrote:
>>>> Hi Hendrik,
>>>>
>>>> The attached is another patch which uses av_reallocp to fix this
>>>> issue.
>>>>
>>> Thanks, that looks almost good. But you should check for a negative
>>> return value, as all errors are negative.
>> Do you mean that the set_segment_filename function should return the value
>> which returns from av_reallocp instead of AVERROR(ENOMEM) when it fails?
> That would be an option too, but right now you just do
> if(av_reallop(..)), at the least this should be if (av_reallocp(...) <
> 0)
>
> or even better:
> ret = av_reallocp(...);
> if (ret < 0)
> return ret;
Thank you, I will follow your advice. Please help review this version. I
have studied some code where av_reallocp is used before sending it out.
>
> - Hendrik
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
--
/Best Regards,
lvqier - lvqier at gmail.com <mailto:lvqier at gmail.com>
/
******************************************
青春如烟,唱一首笑忘歌
-------------- next part --------------
diff --git a/libavformat/segment.c b/libavformat/segment.c
index 8432d0f..0c1f633 100644
--- a/libavformat/segment.c
+++ b/libavformat/segment.c
@@ -183,6 +183,7 @@ static int set_segment_filename(AVFormatContext *s)
SegmentContext *seg = s->priv_data;
AVFormatContext *oc = seg->avf;
size_t size;
+ int ret;
if (seg->segment_idx_wrap)
seg->segment_idx %= seg->segment_idx_wrap;
@@ -206,9 +207,8 @@ static int set_segment_filename(AVFormatContext *s)
if (seg->entry_prefix)
size += strlen(seg->entry_prefix);
- seg->cur_entry.filename = av_mallocz(size);
- if (!seg->cur_entry.filename)
- return AVERROR(ENOMEM);
+ if ((ret = av_reallocp(&seg->cur_entry.filename, size)) < 0)
+ return ret;
snprintf(seg->cur_entry.filename, size, "%s%s",
seg->entry_prefix ? seg->entry_prefix : "",
av_basename(oc->filename));
More information about the ffmpeg-devel
mailing list