diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c index d51a6930e2cbca0833d525c1d5aca230416b6adb..904399c113a32e86251a776d2d88fe32bdd62b00 100644 --- a/libavformat/mpeg.c +++ b/libavformat/mpeg.c @@ -349,18 +349,6 @@ static int mpegps_read_pes_header(AVFormatContext *s, if (startcode == PRIVATE_STREAM_1) { startcode = avio_r8(s->pb); len--; - if (startcode >= 0x80 && startcode <= 0xcf) { - /* audio: skip header */ - avio_r8(s->pb); - avio_r8(s->pb); - avio_r8(s->pb); - len -= 3; - if (startcode >= 0xb0 && startcode <= 0xbf) { - /* MLP/TrueHD audio has a 4-byte header */ - avio_r8(s->pb); - len--; - } - } } if(len<0) goto error_redo; @@ -397,6 +385,22 @@ static int mpegps_read_packet(AVFormatContext *s, if (len < 0) return len; + if (startcode >= 0x80 && startcode <= 0xcf) { + if(len < 4) + goto skip; + + /* audio: skip header */ + avio_r8(s->pb); + avio_r8(s->pb); + avio_r8(s->pb); + len -= 3; + if (startcode >= 0xb0 && startcode <= 0xbf) { + /* MLP/TrueHD audio has a 4-byte header */ + avio_r8(s->pb); + len--; + } + } + /* now find stream */ for(i=0;inb_streams;i++) { st = s->streams[i];