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:
parent
8f6b7a6fd9
commit
4144cc5d79
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user