From c541b5cf43f9853774af150b7e608e51846b423c Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Thu, 3 Mar 2016 17:08:56 +0100 Subject: Mantis 7833: Fix a condition where email sent from an object that is in the process of being removed can cause a null reference --- .../CoreModules/Scripting/EMailModules/EmailModule.cs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/CoreModules/Scripting/EMailModules/EmailModule.cs b/OpenSim/Region/CoreModules/Scripting/EMailModules/EmailModule.cs index 4e7ad75..0752ae5 100644 --- a/OpenSim/Region/CoreModules/Scripting/EMailModules/EmailModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/EMailModules/EmailModule.cs @@ -224,8 +224,9 @@ namespace OpenSim.Region.CoreModules.Scripting.EmailModules return null; } - private void resolveNamePositionRegionName(UUID objectID, out string ObjectName, out string ObjectAbsolutePosition, out string ObjectRegionName) + private bool resolveNamePositionRegionName(UUID objectID, out string ObjectName, out string ObjectAbsolutePosition, out string ObjectRegionName) { + ObjectName = ObjectAbsolutePosition = ObjectRegionName = String.Empty; string m_ObjectRegionName; int objectLocX; int objectLocY; @@ -239,15 +240,9 @@ namespace OpenSim.Region.CoreModules.Scripting.EmailModules ObjectAbsolutePosition = "(" + objectLocX + ", " + objectLocY + ", " + objectLocZ + ")"; ObjectName = part.Name; ObjectRegionName = m_ObjectRegionName; - return; + return true; } - objectLocX = (int)part.AbsolutePosition.X; - objectLocY = (int)part.AbsolutePosition.Y; - objectLocZ = (int)part.AbsolutePosition.Z; - ObjectAbsolutePosition = "(" + objectLocX + ", " + objectLocY + ", " + objectLocZ + ")"; - ObjectName = part.Name; - ObjectRegionName = m_ObjectRegionName; - return; + return false; } /// @@ -286,7 +281,8 @@ namespace OpenSim.Region.CoreModules.Scripting.EmailModules string LastObjectPosition = string.Empty; string LastObjectRegionName = string.Empty; - resolveNamePositionRegionName(objectID, out LastObjectName, out LastObjectPosition, out LastObjectRegionName); + if (!resolveNamePositionRegionName(objectID, out LastObjectName, out LastObjectPosition, out LastObjectRegionName)) + return; if (!address.EndsWith(m_InterObjectHostname)) { @@ -302,7 +298,8 @@ namespace OpenSim.Region.CoreModules.Scripting.EmailModules //Subject emailMessage.Subject = subject; //TEXT Body - resolveNamePositionRegionName(objectID, out LastObjectName, out LastObjectPosition, out LastObjectRegionName); + if (!resolveNamePositionRegionName(objectID, out LastObjectName, out LastObjectPosition, out LastObjectRegionName)) + return; emailMessage.BodyText = "Object-Name: " + LastObjectName + "\nRegion: " + LastObjectRegionName + "\nLocal-Position: " + LastObjectPosition + "\n\n" + body; -- cgit v1.1