From 2b114adcf4b46904e776d42a333db134e53dd6fc Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Fri, 19 Mar 2021 16:02:15 +0100 Subject: [PATCH] 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 Signed-off-by: Andreas Rheinhardt (cherry picked from commit 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;