diff --git a/taglib/matroska/ebml/ebmlmasterelement.cpp b/taglib/matroska/ebml/ebmlmasterelement.cpp index 56afc393..0b38416b 100644 --- a/taglib/matroska/ebml/ebmlmasterelement.cpp +++ b/taglib/matroska/ebml/ebmlmasterelement.cpp @@ -109,16 +109,24 @@ bool EBML::MasterElement::read(File &file, int depth) std::unique_ptr element; while((element = findNextElement(file, maxOffset))) { if(auto master = dynamic_cast(element.get())) { - if(!master->read(file, depth + 1)) - return false; + if(!master->read(file, depth + 1)) { + debug("EBML: Invalid MasterElement"); + continue; + } } else { - if(!element->read(file)) - return false; + if(!element->read(file)) { + debug("EBML: Invalid Element"); + continue; + } } elements.push_back(std::move(element)); } - return file.tell() == maxOffset; + if(file.tell() == maxOffset) { + return true; + } + file.seek(maxOffset); + return false; } bool EBML::MasterElement::read(File &file)