Przeglądaj źródła

Bugfix: Fixing crashes when attempting to access uninitialized GC handles

BearishSun 8 lat temu
rodzic
commit
87a5f4baaa

+ 11 - 2
Source/SBansheeEngine/BsManagedComponent.cpp

@@ -33,7 +33,10 @@ namespace bs
 
 
 	MonoObject* ManagedComponent::getManagedInstance() const
 	MonoObject* ManagedComponent::getManagedInstance() const
 	{
 	{
-		return MonoUtil::getObjectFromGCHandle(mGCHandle);
+		if(mGCHandle != 0)
+			return MonoUtil::getObjectFromGCHandle(mGCHandle);
+
+		return nullptr;
 	}
 	}
 
 
 	ComponentBackupData ManagedComponent::backup(bool clearExisting)
 	ComponentBackupData ManagedComponent::backup(bool clearExisting)
@@ -253,7 +256,13 @@ namespace bs
 
 
 	bool ManagedComponent::calculateBounds(Bounds& bounds)
 	bool ManagedComponent::calculateBounds(Bounds& bounds)
 	{
 	{
-		MonoObject* instance = MonoUtil::getObjectFromGCHandle(mGCHandle);
+		MonoObject* instance;
+		
+		if(mGCHandle != 0)
+			instance = MonoUtil::getObjectFromGCHandle(mGCHandle);
+		else
+			instance = nullptr;
+
 		if (instance != nullptr && mCalculateBoundsMethod != nullptr)
 		if (instance != nullptr && mCalculateBoundsMethod != nullptr)
 		{
 		{
 			AABox box;
 			AABox box;

+ 4 - 1
Source/SBansheeEngine/BsManagedResource.cpp

@@ -39,7 +39,10 @@ namespace bs
 
 
 	MonoObject* ManagedResource::getManagedInstance() const
 	MonoObject* ManagedResource::getManagedInstance() const
 	{
 	{
-		return MonoUtil::getObjectFromGCHandle(mGCHandle);
+		if(mGCHandle != 0)
+			return MonoUtil::getObjectFromGCHandle(mGCHandle);
+		
+		return nullptr;
 	}
 	}
 
 
 	ResourceBackupData ManagedResource::backup(bool clearExisting)
 	ResourceBackupData ManagedResource::backup(bool clearExisting)