diff --git a/libebml2/ebmlmaster.c b/libebml2/ebmlmaster.c index eefec31b..b78a22b4 100644 --- a/libebml2/ebmlmaster.c +++ b/libebml2/ebmlmaster.c @@ -356,6 +356,7 @@ static err_t ReadData(ebml_master *Element, struct stream *Input, const ebml_par Stream_Seek(Input,EBML_ElementPositionEnd(SubElement),SEEK_SET); if (Stream_Read(Input, CRCData, CRCDataSize, NULL)!=ERR_NONE) { + StreamClose(ReadStream); ReadStream=Input; // revert back to normal reading ArrayClear(&CrcBuffer); } @@ -404,6 +405,7 @@ static err_t ReadData(ebml_master *Element, struct stream *Input, const ebml_par if (CRCData!=NULL) { Element->CheckSumStatus = EBML_CRCMatches(CRCElement, CRCData, CRCDataSize)?2:1; + NodeDelete((node*)CRCElement); if (CRCData == ARRAYBEGIN(CrcBuffer,uint8_t)) { StreamClose(ReadStream); @@ -416,6 +418,7 @@ static err_t ReadData(ebml_master *Element, struct stream *Input, const ebml_par { assert(SubElement!=NULL); Stream_Seek(Input,SubElement->ElementPosition,SEEK_SET); + NodeDelete((node*)SubElement); // forget about it, it will be read again later } return ERR_NONE; }