From 8b1ae501b577e302313dd856fe18f0b88f62725d Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Tue, 27 Oct 2015 18:39:33 +0000
Subject: fix services handling of visualparameters, avoiding possible crashs
 (mantis 7732) partially appling code from avinationmerge

---
 OpenSim/Services/Interfaces/IAvatarService.cs | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

(limited to 'OpenSim/Services')

diff --git a/OpenSim/Services/Interfaces/IAvatarService.cs b/OpenSim/Services/Interfaces/IAvatarService.cs
index 6ca0b15..892e0b4 100644
--- a/OpenSim/Services/Interfaces/IAvatarService.cs
+++ b/OpenSim/Services/Interfaces/IAvatarService.cs
@@ -162,10 +162,15 @@ namespace OpenSim.Services.Interfaces
             }
 
             // Visual Params
-            string[] vps = new string[AvatarAppearance.VISUALPARAM_COUNT];
+            //string[] vps = new string[AvatarAppearance.VISUALPARAM_COUNT];
+            //byte[] binary = appearance.VisualParams;
+
+            //            for (int i = 0 ; i < AvatarAppearance.VISUALPARAM_COUNT ; i++)
+
             byte[] binary = appearance.VisualParams;
+            string[] vps = new string[binary.Length];
 
-            for (int i = 0 ; i < AvatarAppearance.VISUALPARAM_COUNT ; i++)
+            for (int i = 0; i < binary.Length; i++)
             {
                 vps[i] = binary[i].ToString();
             }
@@ -202,7 +207,13 @@ namespace OpenSim.Services.Interfaces
                     appearance.Serial = Int32.Parse(Data["Serial"]);
 
                 if (Data.ContainsKey("AvatarHeight"))
-                    appearance.AvatarHeight = float.Parse(Data["AvatarHeight"]);
+                {
+                    float h = float.Parse(Data["AvatarHeight"]);
+                    if( h == 0f)
+                        h = 1.9f;
+                  
+                    appearance.AvatarHeight = h;
+                }
 
                 // Legacy Wearables
                 if (Data.ContainsKey("BodyItem"))
@@ -273,9 +284,13 @@ namespace OpenSim.Services.Interfaces
                 if (Data.ContainsKey("VisualParams"))
                 {
                     string[] vps = Data["VisualParams"].Split(new char[] {','});
-                    byte[] binary = new byte[AvatarAppearance.VISUALPARAM_COUNT];
+                    //byte[] binary = new byte[AvatarAppearance.VISUALPARAM_COUNT];
+
+                    //for (int i = 0 ; i < vps.Length && i < binary.Length ; i++)
+                    
+                    byte[] binary = new byte[vps.Length];
 
-                    for (int i = 0 ; i < vps.Length && i < binary.Length ; i++)
+                    for (int i = 0; i < vps.Length; i++)
                         binary[i] = (byte)Convert.ToInt32(vps[i]);
                     
                     appearance.VisualParams = binary;
-- 
cgit v1.1