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