aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Xu (Hello71) <alex_y_xu@yahoo.ca>2021-11-25 14:30:33 -0500
committerMichael Niedermayer <michael@niedermayer.cc>2021-11-27 18:24:49 +0100
commitcd0bdce71ac0b9871fa04d31756daa26fa7999af (patch)
tree4f6a577195db43365f1a18955ca046bc62565571
parent2cddb2f7a8a98408e3f238933ebf1ae7280fa5fd (diff)
downloadffmpeg-cd0bdce71ac0b9871fa04d31756daa26fa7999af.tar.gz
avcodec/mjpeg_parser: skip markers after EOI, not by size
The check for m->size >= 0xF000 is intended to avoid skipping too much garbage data between JPEG frames in test_roman (thus missing next SOI), but it erroneously also skips valid markers between SOI and SOS. Instead of this, we should simply skip parsing markers other than SOI after EOI. That way, we will not accidentally skip over SOI due to some garbage between frames. There is still a small risk of encountering FFD8 in the garbage data, but the chance of this is fairly low. Fixes: https://trac.ffmpeg.org/ticket/8967 Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavcodec/mjpeg_parser.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/libavcodec/mjpeg_parser.c b/libavcodec/mjpeg_parser.c
index 16a5902c7c..62b923b625 100644
--- a/libavcodec/mjpeg_parser.c
+++ b/libavcodec/mjpeg_parser.c
@@ -80,10 +80,10 @@ static int find_frame_end(MJPEGParserContext *m, const uint8_t *buf, int buf_siz
pc->frame_start_found=0;
pc->state=0;
return i-3;
+ } else if((state>>16)==0xFFD9 && (state&0xFFFF)!=0xFFD8){
+ state= 0xFFD900|(state&0xFF);
} else if(state<0xFFD00000 || state>0xFFD9FFFF){
m->size= (state&0xFFFF)-1;
- if (m->size >= 0xF000)
- m->size = 0;
}
}
if(m->size>0){