In an object return message, send a null-terminated empty string in binary bucket to prevent a viewer 3 crash.
This is the message sent to the client when the object is returned. We were sending byte[0] in the binary bucket. This didn't kill viewer 1 but did terminate viewer 3 (don't know about viewer 2). So sending "\0" instead. This is to address http://opensimulator.org/mantis/view.php?id=5683remove-scene-viewer
parent
dea0935361
commit
306af9934a
|
@ -1372,11 +1372,30 @@ namespace OpenSim.Framework
|
|||
return (ipaddr1 != null) ? "http://" + ipaddr1.ToString() + ":" + port1 : uri;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert a string to a byte format suitable for transport in an LLUDP packet. The output is truncated to 256 bytes if necessary.
|
||||
/// </summary>
|
||||
/// <param name="str">
|
||||
/// If null or empty, then an bytes[0] is returned.
|
||||
/// Using "\0" will return a conversion of the null character to a byte. This is not the same as bytes[0]
|
||||
/// </param>
|
||||
/// <param name="args">
|
||||
/// Arguments to substitute into the string via the {} mechanism.
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
public static byte[] StringToBytes256(string str, params object[] args)
|
||||
{
|
||||
return StringToBytes256(string.Format(str, args));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert a string to a byte format suitable for transport in an LLUDP packet. The output is truncated to 256 bytes if necessary.
|
||||
/// </summary>
|
||||
/// <param name="str">
|
||||
/// If null or empty, then an bytes[0] is returned.
|
||||
/// Using "\0" will return a conversion of the null character to a byte. This is not the same as bytes[0]
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
public static byte[] StringToBytes256(string str)
|
||||
{
|
||||
if (String.IsNullOrEmpty(str)) { return Utils.EmptyBytes; }
|
||||
|
@ -1395,11 +1414,30 @@ namespace OpenSim.Framework
|
|||
return data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert a string to a byte format suitable for transport in an LLUDP packet. The output is truncated to 1024 bytes if necessary.
|
||||
/// </summary>
|
||||
/// <param name="str">
|
||||
/// If null or empty, then an bytes[0] is returned.
|
||||
/// Using "\0" will return a conversion of the null character to a byte. This is not the same as bytes[0]
|
||||
/// </param>
|
||||
/// <param name="args">
|
||||
/// Arguments to substitute into the string via the {} mechanism.
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
public static byte[] StringToBytes1024(string str, params object[] args)
|
||||
{
|
||||
return StringToBytes1024(string.Format(str, args));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert a string to a byte format suitable for transport in an LLUDP packet. The output is truncated to 1024 bytes if necessary.
|
||||
/// </summary>
|
||||
/// <param name="str">
|
||||
/// If null or empty, then an bytes[0] is returned.
|
||||
/// Using "\0" will return a conversion of the null character to a byte. This is not the same as bytes[0]
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
public static byte[] StringToBytes1024(string str)
|
||||
{
|
||||
if (String.IsNullOrEmpty(str)) { return Utils.EmptyBytes; }
|
||||
|
|
|
@ -1579,7 +1579,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
msg.ParentEstateID = RegionInfo.EstateSettings.ParentEstateID;
|
||||
msg.Position = Vector3.Zero;
|
||||
msg.RegionID = RegionInfo.RegionID.Guid;
|
||||
msg.binaryBucket = new byte[0];
|
||||
|
||||
// We must fill in a null-terminated 'empty' string here since bytes[0] will crash viewer 3.
|
||||
msg.binaryBucket = Util.StringToBytes256("\0");
|
||||
if (ret.Value.count > 1)
|
||||
msg.message = string.Format("Your {0} objects were returned from {1} in region {2} due to {3}", ret.Value.count, ret.Value.location.ToString(), RegionInfo.RegionName, ret.Value.reason);
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue