aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2019-10-10 22:23:41 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2019-11-16 22:04:54 +0100
commitec3d8a0e6945fe015d16cd98a1e7dbb4be815c15 (patch)
treed8075592f868bcddb83542936570837bbd9eebb5
parent27522fb64c43e06486261ca9359a1de929b7d2f3 (diff)
downloadffmpeg-ec3d8a0e6945fe015d16cd98a1e7dbb4be815c15.tar.gz
avcodec/mjpeg_parser: Make parser a bit more robust with unclean input
Helps: test_roman.mjpeg (note this is not really just mjpeg) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavcodec/mjpeg_parser.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/libavcodec/mjpeg_parser.c b/libavcodec/mjpeg_parser.c
index 07a6b2bdc6..c642b2ecbc 100644
--- a/libavcodec/mjpeg_parser.c
+++ b/libavcodec/mjpeg_parser.c
@@ -50,7 +50,7 @@ static int find_frame_end(MJPEGParserContext *m, const uint8_t *buf, int buf_siz
for(i=0; i<buf_size;){
state= (state<<8) | buf[i];
if(state>=0xFFC00000 && state<=0xFFFEFFFF){
- if(state>=0xFFD80000 && state<=0xFFD8FFFF){
+ if(state>=0xFFD8FFC0 && state<=0xFFD8FFFF){
i++;
vop_found=1;
break;
@@ -76,12 +76,14 @@ static int find_frame_end(MJPEGParserContext *m, const uint8_t *buf, int buf_siz
for(; i<buf_size;){
state= (state<<8) | buf[i];
if(state>=0xFFC00000 && state<=0xFFFEFFFF){
- if(state>=0xFFD80000 && state<=0xFFD8FFFF){
+ if(state>=0xFFD8FFC0 && state<=0xFFD8FFFF){
pc->frame_start_found=0;
pc->state=0;
return i-3;
} else if(state<0xFFD00000 || state>0xFFD9FFFF){
m->size= (state&0xFFFF)-1;
+ if (m->size >= 0x8000)
+ m->size = 0;
}
}
if(m->size>0){