libebml: fix the end of reading when the size is unknown/infinite

git-svn-id: https://matroska.svn.sourceforge.net/svnroot/matroska/trunk/libebml@271 a6f86f6d-0131-4f8e-9e7b-e335508773d5
This commit is contained in:
Steve Lhomme 2010-05-25 12:05:26 +00:00
parent 8f6b7a6fd9
commit 4144cc5d79

View File

@ -30,7 +30,7 @@
/*!
\file
\version \$Id: EbmlMaster.cpp 1178 2005-05-19 15:47:11Z robux4 $
\version \$Id$
\author Steve Lhomme <robux4 @ users.sf.net>
*/
@ -412,11 +412,13 @@ void EbmlMaster::Read(EbmlStream & inDataStream, const EbmlSemanticContext & sCo
uint64 MaxSizeToRead = GetSize();
// read blocks and discard the ones we don't care about
if (MaxSizeToRead > 0) {
if (MaxSizeToRead > 0 || !IsFiniteSize())
{
inDataStream.I_O().setFilePointer(GetSizePosition() + GetSizeLength(), seek_beginning);
ElementLevelA = inDataStream.FindNextElement(sContext, UpperEltFound, MaxSizeToRead, AllowDummyElt);
while (ElementLevelA != NULL && MaxSizeToRead > 0 && UpperEltFound <= 0) {
MaxSizeToRead = GetEndPosition() - ElementLevelA->GetEndPosition(); // even if it's the default value
while (ElementLevelA != NULL && UpperEltFound <= 0 && (MaxSizeToRead > 0 || !IsFiniteSize())) {
if (IsFiniteSize())
MaxSizeToRead = GetEndPosition() - ElementLevelA->GetEndPosition(); // even if it's the default value
if (!AllowDummyElt && ElementLevelA->IsDummy()) {
ElementLevelA->SkipData(inDataStream, sContext);
delete ElementLevelA; // forget this unknown element