From ef2fd8fcea311c32582a2fba7d8979c529ff05be Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Thu, 8 Jun 2017 20:47:51 +0100
Subject: keep the reverted code, that does work. Our code likes to have
 pbs.Media == null when there is no MOAD defined, so handle possible odd oars
 that may have llsd <array /> on that case

---
 OpenSim/Framework/PrimitiveBaseShape.cs | 43 +++++++++++++++++++++------------
 1 file changed, 28 insertions(+), 15 deletions(-)

(limited to 'OpenSim')

diff --git a/OpenSim/Framework/PrimitiveBaseShape.cs b/OpenSim/Framework/PrimitiveBaseShape.cs
index a830551..96d78d3 100644
--- a/OpenSim/Framework/PrimitiveBaseShape.cs
+++ b/OpenSim/Framework/PrimitiveBaseShape.cs
@@ -1580,35 +1580,48 @@ namespace OpenSim.Framework
             {
                 MediaList ml = new MediaList();
                 ml.ReadXml(rawXml);
+                if(ml.Count == 0)
+                    return null;
                 return ml;
             }
 
             public void ReadXml(string rawXml)
             {
-                using (StringReader sr = new StringReader(rawXml))
+                try
                 {
-                    using (XmlTextReader xtr = new XmlTextReader(sr))
+                    using (StringReader sr = new StringReader(rawXml))
                     {
-                        xtr.MoveToContent();
+                        using (XmlTextReader xtr = new XmlTextReader(sr))
+                        {
+                            xtr.MoveToContent();
 
-                        string type = xtr.GetAttribute("type");
-                        //m_log.DebugFormat("[MOAP]: Loaded media texture entry with type {0}", type);
+                            string type = xtr.GetAttribute("type");
+                            //m_log.DebugFormat("[MOAP]: Loaded media texture entry with type {0}", type);
 
-                        if (type != MEDIA_TEXTURE_TYPE)
-                            return;
+                            if (type != MEDIA_TEXTURE_TYPE)
+                                return;
 
-                        xtr.ReadStartElement("OSMedia");
+                            xtr.ReadStartElement("OSMedia");
+                            OSD osdp = OSDParser.DeserializeLLSDXml(xtr.ReadInnerXml());
+                            if(osdp == null || !(osdp is OSDArray))
+                                return;
 
-                        OSDArray osdMeArray = (OSDArray)OSDParser.DeserializeLLSDXml(xtr.ReadInnerXml());
-                        foreach (OSD osdMe in osdMeArray)
-                        {
-                            MediaEntry me = (osdMe is OSDMap ? MediaEntry.FromOSD(osdMe) : new MediaEntry());
-                            Add(me);
-                        }
+                            OSDArray osdMeArray = osdp as OSDArray;
+                            if(osdMeArray.Count == 0)
+                                return;
 
-                        xtr.ReadEndElement();
+                            foreach (OSD osdMe in osdMeArray)
+                            {
+                                MediaEntry me = (osdMe is OSDMap ? MediaEntry.FromOSD(osdMe) : new MediaEntry());
+                                Add(me);
+                            }
+                        }
                     }
                 }
+                catch
+                {
+                    m_log.Debug("PrimitiveBaseShape] error decoding MOAP xml" );
+                }
             }
 
             public void ReadXml(XmlReader reader)
-- 
cgit v1.1