From d88759d47a2c04e96e24a699c7a9e07c5a45b098 Mon Sep 17 00:00:00 2001 From: David McPaul Date: Thu, 24 Sep 2009 10:13:20 +0000 Subject: [PATCH] Add workaround for some broken avi files with 0 length chunks. See issue 4620 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33261 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../plugins/avi_reader/libOpenDML/OpenDMLParser.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/add-ons/media/plugins/avi_reader/libOpenDML/OpenDMLParser.cpp b/src/add-ons/media/plugins/avi_reader/libOpenDML/OpenDMLParser.cpp index 813613d353..30f343214b 100644 --- a/src/add-ons/media/plugins/avi_reader/libOpenDML/OpenDMLParser.cpp +++ b/src/add-ons/media/plugins/avi_reader/libOpenDML/OpenDMLParser.cpp @@ -359,7 +359,14 @@ OpenDMLParser::Parse() size = maxsize; } + if (size == 0 && fourcc == FOURCC('R','I','F','F')) { + //Calculate size from filesize + size = fSize - 8; + ERROR("OpenDMLParser::Parse: Warning chunk '"FOURCC_FORMAT"', size is 0 calculating as %lu\n", FOURCC_PARAM(fourcc), size); + } + if (size == 0) { + // size is still 0 ERROR("OpenDMLParser::Parse: Error: chunk of size 0 found\n"); return B_ERROR; } @@ -455,8 +462,8 @@ OpenDMLParser::ParseChunk_AVI(int number, uint64 start, uint32 size) } if (Chunksize == 0) { - TRACE("OpenDMLParser::ParseChunk_AVI: chunk '"FOURCC_FORMAT"' has size 0\n", FOURCC_PARAM(Chunkfcc)); - return B_OK; + ERROR("OpenDMLParser::ParseChunk_AVI: chunk '"FOURCC_FORMAT"' has size 0 assuming %lu\n", FOURCC_PARAM(Chunkfcc), maxsize); + Chunksize = maxsize; // Assume maxsize } if (Chunkfcc == FOURCC('L','I','S','T')) {