From: Ami Fischman <fisch...@chromium.org> Signed-off-by: Ronald S. Bultje <rsbul...@gmail.com> --- libavformat/matroskadec.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 57a8f62..a192090 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -1623,7 +1623,7 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, if (size <= 3 || !track || !track->stream) { av_log(matroska->ctx, AV_LOG_INFO, "Invalid stream %"PRIu64" or size %u\n", num, size); - return res; + return AVERROR_INVALIDDATA; } st = track->stream; if (st->discard >= AVDISCARD_ALL) @@ -1860,7 +1860,7 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska) res = ebml_parse(matroska, matroska_clusters, &cluster); blocks_list = &cluster.blocks; blocks = blocks_list->elem; - for (i=0; i<blocks_list->nb_elem; i++) + for (i=0; i<blocks_list->nb_elem && !res; i++) if (blocks[i].bin.size > 0 && blocks[i].bin.data) { int is_keyframe = blocks[i].non_simple ? !blocks[i].reference : -1; if (!blocks[i].non_simple) @@ -1879,11 +1879,13 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska) static int matroska_read_packet(AVFormatContext *s, AVPacket *pkt) { MatroskaDemuxContext *matroska = s->priv_data; + int ret; while (matroska_deliver_packet(matroska, pkt)) { if (matroska->done) return AVERROR_EOF; - matroska_parse_cluster(matroska); + ret = matroska_parse_cluster(matroska); + if (ret) return ret; } return 0; -- 1.7.5.4 _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel