Message ID | 20201022132300.1626-1-dont.buck@gmail.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] avdevice/gdigrab: Memory leak if BitBlt return false. | expand |
Context | Check | Description |
---|---|---|
andriy/x86_make | success | Make finished |
andriy/x86_make_fate | success | Make fate finished |
andriy/PPC64_make | success | Make finished |
andriy/PPC64_make_fate | success | Make fate finished |
dont.buck@gmail.com: > From: walle <dont.buck@gmail.com> > > lock screen or other permission notification in win7 or > higher windows version would case BitBlt return false, > and gdigrab_read_packet will return AVERROR(EIO) and do nothing to > allocated packet data, then memory leak happend. It's necessary to > release packet data before return from gdigrab_read_packet. > --- > libavdevice/gdigrab.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/libavdevice/gdigrab.c b/libavdevice/gdigrab.c > index f4444406fa..b69494c98d 100644 > --- a/libavdevice/gdigrab.c > +++ b/libavdevice/gdigrab.c > @@ -576,6 +576,7 @@ static int gdigrab_read_packet(AVFormatContext *s1, AVPacket *pkt) > clip_rect.bottom - clip_rect.top, > source_hdc, > clip_rect.left, clip_rect.top, SRCCOPY | CAPTUREBLT)) { > + av_packet_unref(pkt); > WIN32_API_ERROR("Failed to capture image"); > return AVERROR(EIO); > } > What version did you use when encountering this leak? This leak should have been fixed in bae8844e35147f92e612a9e0b44e939a293e5bc9. - Andreas
> dont.buck@gmail.com: > > From: walle <dont.buck@gmail.com> > > > > lock screen or other permission notification in win7 or > > higher windows version would case BitBlt return false, > > and gdigrab_read_packet will return AVERROR(EIO) and do nothing to > > allocated packet data, then memory leak happend. It's necessary to > > release packet data before return from gdigrab_read_packet. > > --- > > libavdevice/gdigrab.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/libavdevice/gdigrab.c b/libavdevice/gdigrab.c > > index f4444406fa..b69494c98d 100644 > > --- a/libavdevice/gdigrab.c > > +++ b/libavdevice/gdigrab.c > > @@ -576,6 +576,7 @@ static int gdigrab_read_packet(AVFormatContext *s1, AVPacket *pkt) > > clip_rect.bottom - clip_rect.top, > > source_hdc, > > clip_rect.left, clip_rect.top, SRCCOPY | CAPTUREBLT)) { > > + av_packet_unref(pkt); > > WIN32_API_ERROR("Failed to capture image"); > > return AVERROR(EIO); > > } > > > What version did you use when encountering this leak? This leak should > have been fixed in bae8844e35147f92e612a9e0b44e939a293e5bc9. Your reply is really useful, thanks, I'm using the old 3.4.7 version. And would you please tell me how to reply the email with "> " ahead of each line, I'm using an email client and have to add them manually. dont.buck@gmail.com From: Andreas Rheinhardt Date: 2020-10-22 21:52 To: ffmpeg-devel Subject: Re: [FFmpeg-devel] [PATCH] avdevice/gdigrab: Memory leak if BitBlt return false. dont.buck@gmail.com: > From: walle <dont.buck@gmail.com> > > lock screen or other permission notification in win7 or > higher windows version would case BitBlt return false, > and gdigrab_read_packet will return AVERROR(EIO) and do nothing to > allocated packet data, then memory leak happend. It's necessary to > release packet data before return from gdigrab_read_packet. > --- > libavdevice/gdigrab.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/libavdevice/gdigrab.c b/libavdevice/gdigrab.c > index f4444406fa..b69494c98d 100644 > --- a/libavdevice/gdigrab.c > +++ b/libavdevice/gdigrab.c > @@ -576,6 +576,7 @@ static int gdigrab_read_packet(AVFormatContext *s1, AVPacket *pkt) > clip_rect.bottom - clip_rect.top, > source_hdc, > clip_rect.left, clip_rect.top, SRCCOPY | CAPTUREBLT)) { > + av_packet_unref(pkt); > WIN32_API_ERROR("Failed to capture image"); > return AVERROR(EIO); > } > What version did you use when encountering this leak? This leak should have been fixed in bae8844e35147f92e612a9e0b44e939a293e5bc9. - Andreas
dont.buck@gmail.com: >> dont.buck@gmail.com: >>> From: walle <dont.buck@gmail.com> >>> >>> lock screen or other permission notification in win7 or >>> higher windows version would case BitBlt return false, >>> and gdigrab_read_packet will return AVERROR(EIO) and do nothing to >>> allocated packet data, then memory leak happend. It's necessary to >>> release packet data before return from gdigrab_read_packet. >>> --- >>> libavdevice/gdigrab.c | 1 + >>> 1 file changed, 1 insertion(+) >>> >>> diff --git a/libavdevice/gdigrab.c b/libavdevice/gdigrab.c >>> index f4444406fa..b69494c98d 100644 >>> --- a/libavdevice/gdigrab.c >>> +++ b/libavdevice/gdigrab.c >>> @@ -576,6 +576,7 @@ static int gdigrab_read_packet(AVFormatContext *s1, AVPacket *pkt) >>> clip_rect.bottom - clip_rect.top, >>> source_hdc, >>> clip_rect.left, clip_rect.top, SRCCOPY | CAPTUREBLT)) { >>> + av_packet_unref(pkt); >>> WIN32_API_ERROR("Failed to capture image"); >>> return AVERROR(EIO); >>> } >>> >> What version did you use when encountering this leak? This leak should >> have been fixed in bae8844e35147f92e612a9e0b44e939a293e5bc9. > > Your reply is really useful, thanks, I'm using the old 3.4.7 version. And would you please tell me how to reply the email with "> " ahead of each line, I'm using an email client and have to add them manually. > > If your email client doesn't add them when you just reply to a mail, then it seems that your email client is either misconfigured or shit. I can't help you with that as I have never used Foxmail. It's also not really something for this mailing list. - Andreas
diff --git a/libavdevice/gdigrab.c b/libavdevice/gdigrab.c index f4444406fa..b69494c98d 100644 --- a/libavdevice/gdigrab.c +++ b/libavdevice/gdigrab.c @@ -576,6 +576,7 @@ static int gdigrab_read_packet(AVFormatContext *s1, AVPacket *pkt) clip_rect.bottom - clip_rect.top, source_hdc, clip_rect.left, clip_rect.top, SRCCOPY | CAPTUREBLT)) { + av_packet_unref(pkt); WIN32_API_ERROR("Failed to capture image"); return AVERROR(EIO); }
From: walle <dont.buck@gmail.com> lock screen or other permission notification in win7 or higher windows version would case BitBlt return false, and gdigrab_read_packet will return AVERROR(EIO) and do nothing to allocated packet data, then memory leak happend. It's necessary to release packet data before return from gdigrab_read_packet. --- libavdevice/gdigrab.c | 1 + 1 file changed, 1 insertion(+)