[FFmpeg-cvslog] avcodec/parser: Don't return pointer to stack buffer
Andreas Rheinhardt
git at videolan.org
Sat Mar 20 05:26:08 EET 2021
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at gmail.com> | Fri Mar 19 16:02:15 2021 +0100| [9faf3f8bb04e537f552332aa316c6659dcd7d251] | committer: Andreas Rheinhardt
avcodec/parser: Don't return pointer to stack buffer
When flushing, the parser receives a dummy buffer with padding
that lives on the stack of av_parser_parse2(). Certain parsers
(e.g. Dolby E) only analyze the input, but don't repack it. When
flushing, such parsers return a pointer to the stack buffer and
a size of 0. And this is also what av_parser_parse2() returns.
Fix this by always resetting poutbuf in case poutbuf_size is zero.
Reviewed-by: James Almer <jamrial at gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9faf3f8bb04e537f552332aa316c6659dcd7d251
---
libavcodec/parser.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/libavcodec/parser.c b/libavcodec/parser.c
index f4bc00da7d..11c41d6a0a 100644
--- a/libavcodec/parser.c
+++ b/libavcodec/parser.c
@@ -179,6 +179,9 @@ int av_parser_parse2(AVCodecParserContext *s, AVCodecContext *avctx,
/* offset of the next frame */
s->next_frame_offset = s->cur_offset + index;
s->fetch_timestamp = 1;
+ } else {
+ /* Don't return a pointer to dummy_buf. */
+ *poutbuf = NULL;
}
if (index < 0)
index = 0;
More information about the ffmpeg-cvslog
mailing list