From cfa7cac14936946f6247ef54dcbec446cc20b53c Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 13 Mar 2023 14:24:16 +0100 Subject: [PATCH] Fix crash when loading scene with script which type is not a scene object --- Source/Engine/Level/SceneObjectsFactory.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Source/Engine/Level/SceneObjectsFactory.cpp b/Source/Engine/Level/SceneObjectsFactory.cpp index 6c3576f35..35629dc6a 100644 --- a/Source/Engine/Level/SceneObjectsFactory.cpp +++ b/Source/Engine/Level/SceneObjectsFactory.cpp @@ -98,6 +98,12 @@ SceneObject* SceneObjectsFactory::Spawn(Context& context, ISerializable::Deseria const ScriptingTypeHandle type = Scripting::FindScriptingType(typeName); if (type) { + // TODO: cache per-type result in Context to boost loading of the large scenes + if (!SceneObject::TypeInitializer.IsAssignableFrom(type)) + { + LOG(Warning, "Invalid scene object type {0} (inherits from: {1}).", type.ToString(true), type.GetType().GetBaseType().ToString()); + return nullptr; + } const ScriptingObjectSpawnParams params(id, type); obj = (SceneObject*)type.GetType().Script.Spawn(params); if (obj == nullptr) @@ -160,6 +166,10 @@ SceneObject* SceneObjectsFactory::Spawn(Context& context, ISerializable::Deseria void SceneObjectsFactory::Deserialize(Context& context, SceneObject* obj, ISerializable::DeserializeStream& stream) { +#if ENABLE_ASSERTION + CHECK(obj); +#endif + // Check for prefab instance Guid prefabObjectId; if (JsonTools::GetGuidIfValid(prefabObjectId, stream, "PrefabObjectID"))