mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-26 13:00:33 +00:00
nutdec: stop skipping bytes at EOF
This can unnecessarily waste a lot of time. Reviewed-by: Michael Niedermayer <michaelni@gmx.at> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
This commit is contained in:
parent
37e679881d
commit
fa7dec8cb0
@ -47,6 +47,8 @@ static int get_str(AVIOContext *bc, char *string, unsigned int maxlen)
|
||||
while (len > maxlen) {
|
||||
avio_r8(bc);
|
||||
len--;
|
||||
if (bc->eof_reached)
|
||||
len = maxlen;
|
||||
}
|
||||
|
||||
if (maxlen)
|
||||
@ -213,8 +215,11 @@ static int skip_reserved(AVIOContext *bc, int64_t pos)
|
||||
avio_seek(bc, pos, SEEK_CUR);
|
||||
return AVERROR_INVALIDDATA;
|
||||
} else {
|
||||
while (pos--)
|
||||
while (pos--) {
|
||||
if (bc->eof_reached)
|
||||
return AVERROR_INVALIDDATA;
|
||||
avio_r8(bc);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -293,8 +298,13 @@ static int decode_main_header(NUTContext *nut)
|
||||
if (tmp_fields > 7)
|
||||
tmp_head_idx = ffio_read_varlen(bc);
|
||||
|
||||
while (tmp_fields-- > 8)
|
||||
while (tmp_fields-- > 8) {
|
||||
if (bc->eof_reached) {
|
||||
av_log(s, AV_LOG_ERROR, "reached EOF while decoding main header\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
ffio_read_varlen(bc);
|
||||
}
|
||||
|
||||
if (count <= 0 || count > 256 - (i <= 'N') - i) {
|
||||
av_log(s, AV_LOG_ERROR, "illegal count %d at %d\n", count, i);
|
||||
@ -992,8 +1002,13 @@ static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id,
|
||||
*header_idx = ffio_read_varlen(bc);
|
||||
if (flags & FLAG_RESERVED)
|
||||
reserved_count = ffio_read_varlen(bc);
|
||||
for (i = 0; i < reserved_count; i++)
|
||||
for (i = 0; i < reserved_count; i++) {
|
||||
if (bc->eof_reached) {
|
||||
av_log(s, AV_LOG_ERROR, "reached EOF while decoding frame header\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
ffio_read_varlen(bc);
|
||||
}
|
||||
|
||||
if (*header_idx >= (unsigned)nut->header_count) {
|
||||
av_log(s, AV_LOG_ERROR, "header_idx invalid\n");
|
||||
|
Loading…
Reference in New Issue
Block a user