Return an error when get_buffer reads none or only partial data instead

of returning packets with uninitialized data.
Returning partial packets as for other demuxers is problematice due to
packet scrambling and thus is not done.

Originally committed as revision 25931 to svn://svn.ffmpeg.org/ffmpeg/trunk
oldabi
Reimar Döffinger 14 years ago
parent 3c3ef81b9b
commit 4172951ba7
  1. 5
      libavformat/asfdec.c

@ -848,6 +848,7 @@ static int ff_asf_parse_packet(AVFormatContext *s, ByteIOContext *pb, AVPacket *
ASFContext *asf = s->priv_data; ASFContext *asf = s->priv_data;
ASFStream *asf_st = 0; ASFStream *asf_st = 0;
for (;;) { for (;;) {
int ret;
if(url_feof(pb)) if(url_feof(pb))
return AVERROR_EOF; return AVERROR_EOF;
if (asf->packet_size_left < FRAME_HEADER_SIZE if (asf->packet_size_left < FRAME_HEADER_SIZE
@ -950,8 +951,10 @@ static int ff_asf_parse_packet(AVFormatContext *s, ByteIOContext *pb, AVPacket *
continue; continue;
} }
get_buffer(pb, asf_st->pkt.data + asf->packet_frag_offset, ret = get_buffer(pb, asf_st->pkt.data + asf->packet_frag_offset,
asf->packet_frag_size); asf->packet_frag_size);
if (ret != asf->packet_frag_size)
return ret >= 0 ? AVERROR_EOF : ret;
if (s->key && s->keylen == 20) if (s->key && s->keylen == 20)
ff_asfcrypt_dec(s->key, asf_st->pkt.data + asf->packet_frag_offset, ff_asfcrypt_dec(s->key, asf_st->pkt.data + asf->packet_frag_offset,
asf->packet_frag_size); asf->packet_frag_size);

Loading…
Cancel
Save