Mercurial > libavformat.hg
changeset 1665:074b64b1fb61 libavformat
reduce len checks, simplifies code
there is a very small chance that a stream which is damaged && unseekable && very small packet && damage to the flags && unlucky buffer state could have a valid packet after a damaged packet lost, but i think this is so unlikely that the simplification outweights it
mans if you disagree with any commit to mpeg.c just say so and ill revert it
author | michael |
---|---|
date | Wed, 17 Jan 2007 10:44:57 +0000 |
parents | 5e7460a2f209 |
children | 682ea2701149 |
files | mpeg.c |
diffstat | 1 files changed, 2 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/mpeg.c Wed Jan 17 10:19:10 2007 +0000 +++ b/mpeg.c Wed Jan 17 10:44:57 2007 +0000 @@ -1498,20 +1498,14 @@ } if ((c & 0xc0) == 0x40) { /* buffer scale & size */ - if (len < 2) - goto error_redo; get_byte(&s->pb); c = get_byte(&s->pb); len -= 2; } if ((c & 0xf0) == 0x20) { - if (len < 4) - goto error_redo; dts = pts = get_pts(&s->pb, c); len -= 4; } else if ((c & 0xf0) == 0x30) { - if (len < 9) - goto error_redo; pts = get_pts(&s->pb, c); dts = get_pts(&s->pb, -1); len -= 9; @@ -1530,15 +1524,11 @@ goto error_redo; if ((flags & 0xc0) == 0x80) { dts = pts = get_pts(&s->pb, -1); - if (header_len < 5) - goto error_redo; header_len -= 5; len -= 5; } if ((flags & 0xc0) == 0xc0) { pts = get_pts(&s->pb, -1); dts = get_pts(&s->pb, -1); - if (header_len < 10) - goto error_redo; header_len -= 10; len -= 10; } @@ -1552,20 +1542,18 @@ goto redo; if (startcode == PRIVATE_STREAM_1 && !m->psm_es_type[startcode & 0xff]) { - if (len < 1) - goto error_redo; startcode = get_byte(&s->pb); len--; if (startcode >= 0x80 && startcode <= 0xbf) { /* audio: skip header */ - if (len < 3) - goto error_redo; get_byte(&s->pb); get_byte(&s->pb); get_byte(&s->pb); len -= 3; } } + if(len<0) + goto error_redo; if(dts != AV_NOPTS_VALUE && ppos){ int i; for(i=0; i<s->nb_streams; i++){