From b139ebfe889de3920df3007819fed222ef399b22 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 21 Nov 2022 15:37:17 +0100 Subject: [PATCH] Fix crash when reading Transform from native data stream --- Source/Engine/Core/Types/Variant.cpp | 5 +++++ Source/Engine/Core/Types/Variant.h | 1 + Source/Engine/Serialization/Serialization.cpp | 2 +- Source/Engine/Serialization/Stream.cpp | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Source/Engine/Core/Types/Variant.cpp b/Source/Engine/Core/Types/Variant.cpp index 227d6708f..5bf8dbf88 100644 --- a/Source/Engine/Core/Types/Variant.cpp +++ b/Source/Engine/Core/Types/Variant.cpp @@ -2268,6 +2268,11 @@ const Ray& Variant::AsRay() const #endif } +Transform& Variant::AsTransform() +{ + return *(Transform*)AsBlob.Data; +} + const Transform& Variant::AsTransform() const { return *(const Transform*)AsBlob.Data; diff --git a/Source/Engine/Core/Types/Variant.h b/Source/Engine/Core/Types/Variant.h index bfb7c14b0..33ad6df19 100644 --- a/Source/Engine/Core/Types/Variant.h +++ b/Source/Engine/Core/Types/Variant.h @@ -332,6 +332,7 @@ public: const BoundingBox& AsBoundingBox() const; Ray& AsRay(); const Ray& AsRay() const; + Transform& AsTransform(); const Transform& AsTransform() const; const Matrix& AsMatrix() const; Array& AsArray(); diff --git a/Source/Engine/Serialization/Serialization.cpp b/Source/Engine/Serialization/Serialization.cpp index 163a65d2b..2d6a8b4b8 100644 --- a/Source/Engine/Serialization/Serialization.cpp +++ b/Source/Engine/Serialization/Serialization.cpp @@ -344,7 +344,7 @@ void Serialization::Deserialize(ISerializable::DeserializeStream& stream, Varian Deserialize(value, v.AsBoundingBox(), modifier); break; case VariantType::Transform: - Deserialize(value, *(Transform*)v.AsBlob.Data, modifier); + Deserialize(value, v.AsTransform(), modifier); break; case VariantType::Ray: Deserialize(value, v.AsRay(), modifier); diff --git a/Source/Engine/Serialization/Stream.cpp b/Source/Engine/Serialization/Stream.cpp index caf24c1ff..78adbe2c1 100644 --- a/Source/Engine/Serialization/Stream.cpp +++ b/Source/Engine/Serialization/Stream.cpp @@ -438,7 +438,7 @@ void ReadStream::ReadVariant(Variant* data) ReadBytes(&data->AsData, sizeof(Quaternion)); break; case VariantType::Transform: - ReadTransform((Transform*)&data->AsData); + ReadTransform(&data->AsTransform()); break; case VariantType::Rectangle: ReadBytes(&data->AsData, sizeof(Rectangle));