diff options
author | Peter Ross <pross@xvid.org> | 2009-11-24 07:08:17 +0000 |
---|---|---|
committer | Peter Ross <pross@xvid.org> | 2009-11-24 07:08:17 +0000 |
commit | c351524c9e7f90be8e11eccc7bac405505e4bb76 (patch) | |
tree | bf00179aca987ba068359b97398981b6fcbc693b /libavformat | |
parent | d90aeeaf569e4a08c30b3d1d09c3cff3a86eb431 (diff) | |
download | ffmpeg-c351524c9e7f90be8e11eccc7bac405505e4bb76.tar.gz |
Determine VOC block length when length field is zero, fixes issue1538.
Originally committed as revision 20596 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/voc.h | 2 | ||||
-rw-r--r-- | libavformat/vocdec.c | 5 |
2 files changed, 6 insertions, 1 deletions
diff --git a/libavformat/voc.h b/libavformat/voc.h index 7993146f47..3f995ad31f 100644 --- a/libavformat/voc.h +++ b/libavformat/voc.h @@ -26,7 +26,7 @@ #include "riff.h" /* for CodecTag */ typedef struct voc_dec_context { - int remaining_size; + int64_t remaining_size; } VocDecContext; typedef enum voc_type { diff --git a/libavformat/vocdec.c b/libavformat/vocdec.c index 94fbd7b9bf..246dbd91b4 100644 --- a/libavformat/vocdec.c +++ b/libavformat/vocdec.c @@ -76,6 +76,11 @@ voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size) if (type == VOC_TYPE_EOF) return AVERROR(EIO); voc->remaining_size = get_le24(pb); + if (!voc->remaining_size) { + if (url_is_streamed(s->pb)) + return AVERROR(EIO); + voc->remaining_size = url_fsize(pb) - url_ftell(pb); + } max_size -= 4; switch (type) { |