diff --git a/src/EbmlBinary.cpp b/src/EbmlBinary.cpp index e653b386..a274cee3 100644 --- a/src/EbmlBinary.cpp +++ b/src/EbmlBinary.cpp @@ -72,25 +72,27 @@ filepos_t EbmlBinary::UpdateSize(const ShouldWrite & writeFilter, bool /* bForce filepos_t EbmlBinary::ReadData(IOCallback & input, ScopeMode ReadFully) { + const auto SizeToRead = GetSize(); if (Data != nullptr) { free(Data); Data = nullptr; } if (ReadFully == SCOPE_NO_DATA) { - return GetSize(); + return SizeToRead; } - if (!GetSize()) { + if (!SizeToRead) { SetValueIsSet(); return 0; } - Data = (GetSize() < std::numeric_limits::max()) ? static_cast(malloc(GetSize())) : nullptr; + Data = (SizeToRead < std::numeric_limits::max()) ? static_cast(malloc(SizeToRead)) : nullptr; if (Data == nullptr) throw std::runtime_error("Error allocating data"); + input.readFully(Data, SizeToRead); SetValueIsSet(); - return input.read(Data, GetSize()); + return SizeToRead; } bool EbmlBinary::operator==(const EbmlBinary & ElementToCompare) const