more safety on the Binary buffer handling in case we run out of memory
git-svn-id: https://matroska.svn.sourceforge.net/svnroot/matroska/trunk/libebml@491 a6f86f6d-0131-4f8e-9e7b-e335508773d5
This commit is contained in:
parent
df5620c733
commit
42044e93f5
@ -1,6 +1,7 @@
|
|||||||
2010-08-xx robux4
|
2010-08-xx robux4
|
||||||
New 1.1.1 version:
|
New 1.1.1 version:
|
||||||
- no need to put the internal code of EbmlCrc32 in the public header
|
- no need to put the internal code of EbmlCrc32 in the public header
|
||||||
|
- more safety on the Binary buffer handling in case we run out of memory
|
||||||
|
|
||||||
2010-07-xx robux4
|
2010-07-xx robux4
|
||||||
New 1.1.0 version:
|
New 1.1.0 version:
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
#include "ebml/EbmlBinary.h"
|
#include "ebml/EbmlBinary.h"
|
||||||
|
#include "ebml/StdIOCallback.h"
|
||||||
|
|
||||||
START_LIBEBML_NAMESPACE
|
START_LIBEBML_NAMESPACE
|
||||||
|
|
||||||
@ -84,14 +85,15 @@ filepos_t EbmlBinary::ReadData(IOCallback & input, ScopeMode ReadFully)
|
|||||||
if (Data != NULL)
|
if (Data != NULL)
|
||||||
free(Data);
|
free(Data);
|
||||||
|
|
||||||
if (ReadFully == SCOPE_NO_DATA)
|
if (ReadFully == SCOPE_NO_DATA || !GetSize())
|
||||||
{
|
{
|
||||||
Data = NULL;
|
Data = NULL;
|
||||||
return GetSize();
|
return GetSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
Data = (binary *)malloc(GetSize() * sizeof(binary));
|
Data = (binary *)malloc(GetSize() * sizeof(binary));
|
||||||
assert(Data != NULL);
|
if (Data == NULL)
|
||||||
|
throw CRTError::CRTError("Error allocating data");
|
||||||
SetValueIsSet();
|
SetValueIsSet();
|
||||||
return input.read(Data, GetSize());
|
return input.read(Data, GetSize());
|
||||||
}
|
}
|
||||||
|
@ -278,7 +278,7 @@ EbmlElement *EbmlMaster::FindFirstElt(const EbmlCallbacks & Callbacks, bool bCre
|
|||||||
size_t Index;
|
size_t Index;
|
||||||
|
|
||||||
for (Index = 0; Index < ElementList.size(); Index++) {
|
for (Index = 0; Index < ElementList.size(); Index++) {
|
||||||
if (EbmlId(*(ElementList[Index])) == EBML_INFO_ID(Callbacks))
|
if (ElementList[Index] && EbmlId(*(ElementList[Index])) == EBML_INFO_ID(Callbacks))
|
||||||
return ElementList[Index];
|
return ElementList[Index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user