Fix crash when memory stream reading fails and perform soft error handling

#3612
This commit is contained in:
Wojtek Figat
2025-08-15 14:19:59 +02:00
parent 774b6bd72c
commit f21accd466
5 changed files with 10 additions and 6 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -656,7 +656,7 @@ bool SkinnedModel::LoadHeader(ReadStream& stream, byte& headerVersion)
}
}
return false;
return stream.HasError();
}
#if USE_EDITOR

View File

@@ -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;
}