diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2021-03-19 16:02:15 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2021-03-20 03:56:57 +0100 |
commit | 9faf3f8bb04e537f552332aa316c6659dcd7d251 (patch) | |
tree | 6bcc79a58a9c00053580785ff0b91810f769c0e6 | |
parent | f21b47f38c2fe67fe218a5621aec24be45ca12a2 (diff) | |
download | ffmpeg-9faf3f8bb04e537f552332aa316c6659dcd7d251.tar.gz |
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@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r-- | libavcodec/parser.c | 3 |
1 files changed, 3 insertions, 0 deletions
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; |