Fix crash when memory stream reading fails and perform soft error handling
#3612
This commit is contained in:
@@ -531,7 +531,7 @@ bool Animation::SaveHeader(const ModelData& modelData, WriteStream& stream, int3
|
||||
// Nested animations
|
||||
stream.WriteInt32(0); // Empty list
|
||||
|
||||
return false;
|
||||
return stream.HasError();
|
||||
}
|
||||
|
||||
void Animation::GetReferences(Array<Guid>& assets, Array<String>& files) const
|
||||
|
||||
@@ -395,7 +395,7 @@ bool Model::LoadHeader(ReadStream& stream, byte& headerVersion)
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return stream.HasError();
|
||||
}
|
||||
|
||||
#if USE_EDITOR
|
||||
@@ -454,7 +454,7 @@ bool Model::SaveHeader(WriteStream& stream, const ModelData& modelData)
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return stream.HasError();
|
||||
}
|
||||
|
||||
bool Model::Save(bool withMeshDataFromGpu, Function<FlaxChunk*(int32)>& getChunk) const
|
||||
|
||||
@@ -329,7 +329,7 @@ bool ModelBase::LoadHeader(ReadStream& stream, byte& headerVersion)
|
||||
stream.Read(slot.Name, 11);
|
||||
}
|
||||
|
||||
return false;
|
||||
return stream.HasError();
|
||||
}
|
||||
|
||||
bool ModelBase::LoadMesh(MemoryReadStream& stream, byte meshVersion, MeshBase* mesh, MeshData* dataIfReadOnly)
|
||||
|
||||
@@ -656,7 +656,7 @@ bool SkinnedModel::LoadHeader(ReadStream& stream, byte& headerVersion)
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return stream.HasError();
|
||||
}
|
||||
|
||||
#if USE_EDITOR
|
||||
|
||||
@@ -61,7 +61,11 @@ void MemoryReadStream::ReadBytes(void* data, uint32 bytes)
|
||||
{
|
||||
if (bytes > 0)
|
||||
{
|
||||
ASSERT(data && GetLength() - GetPosition() >= bytes);
|
||||
if (!data || GetLength() - GetPosition() < bytes)
|
||||
{
|
||||
_hasError = true;
|
||||
return;
|
||||
}
|
||||
Platform::MemoryCopy(data, _position, bytes);
|
||||
_position += bytes;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user