[FFmpeg-cvslog] avcodec/speexdec: relax the extradata check for the speex string
James Almer
git at videolan.org
Mon Jan 22 16:01:34 EET 2024
ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Fri Jan 19 22:34:28 2024 -0300| [cad35f0a7740a96740aa9367c401a36c86522245] | committer: James Almer
avcodec/speexdec: relax the extradata check for the speex string
There could be bogus bytes at the start, as is the case of
vp5/potter512-400-partial.avi from the FATE suite, which could be a case of bad
remuxing from an OGG source.
Partially fixes decoding of vp5/potter512-400-partial.avi
Signed-off-by: James Almer <jamrial at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=cad35f0a7740a96740aa9367c401a36c86522245
---
libavcodec/speexdec.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/libavcodec/speexdec.c b/libavcodec/speexdec.c
index 08c7e77e7d..c73b2a7ec2 100644
--- a/libavcodec/speexdec.c
+++ b/libavcodec/speexdec.c
@@ -52,6 +52,7 @@
*/
#include "libavutil/avassert.h"
+#include "libavutil/avstring.h"
#include "libavutil/float_dsp.h"
#include "avcodec.h"
#include "bytestream.h"
@@ -1397,9 +1398,9 @@ static int parse_speex_extradata(AVCodecContext *avctx,
const uint8_t *extradata, int extradata_size)
{
SpeexContext *s = avctx->priv_data;
- const uint8_t *buf = extradata;
+ const uint8_t *buf = av_strnstr(extradata, "Speex ", extradata_size);
- if (memcmp(buf, "Speex ", 8))
+ if (!buf)
return AVERROR_INVALIDDATA;
buf += 28;
More information about the ffmpeg-cvslog
mailing list