Mantis #7657 and #7514. This should alleviate the problem of bad object assets being passed around via HG and archives. No guarantees that all the leaks have been found, but at least it detects and fixes these bad assets upon:
(1) storing and getting assets over HG -- assuming the core HG asset service is being used (not the case with OSGrid!) (2) importing assets via OAR and IAR Instantiation of bad assets now should also work, instead of producing an exception, but the bad assets themselves aren't being fixed in the DB. That should be done with a cleaning tool -- see Perl script in Mantis #7657. Virus!0.8.2-post-fixes
parent
32d87aa168
commit
e5a1243abc
|
@ -190,6 +190,9 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
if (xmlData == string.Empty || homeURL == string.Empty || userService == null)
|
if (xmlData == string.Empty || homeURL == string.Empty || userService == null)
|
||||||
return xmlData;
|
return xmlData;
|
||||||
|
|
||||||
|
// Deal with bug
|
||||||
|
xmlData = ExternalRepresentationUtils.SanitizeXml(xmlData);
|
||||||
|
|
||||||
using (StringWriter sw = new StringWriter())
|
using (StringWriter sw = new StringWriter())
|
||||||
using (XmlTextWriter writer = new XmlTextWriter(sw))
|
using (XmlTextWriter writer = new XmlTextWriter(sw))
|
||||||
using (XmlTextReader wrappedReader = new XmlTextReader(xmlData, XmlNodeType.Element, null))
|
using (XmlTextReader wrappedReader = new XmlTextReader(xmlData, XmlNodeType.Element, null))
|
||||||
|
@ -364,5 +367,21 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
{
|
{
|
||||||
return homeURL + "/" + uuid + ";" + name;
|
return homeURL + "/" + uuid + ";" + name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sanitation for bug introduced in Oct. 20 (1eb3e6cc43e2a7b4053bc1185c7c88e22356c5e8)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="xmlData"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string SanitizeXml(string xmlData)
|
||||||
|
{
|
||||||
|
string fixedData = xmlData;
|
||||||
|
if (fixedData != null)
|
||||||
|
// Loop, because it may contain multiple
|
||||||
|
while (fixedData.Contains("xmlns:xmlns:"))
|
||||||
|
fixedData = fixedData.Replace("xmlns:xmlns:", "xmlns:");
|
||||||
|
return fixedData;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ using OpenMetaverse;
|
||||||
using OpenMetaverse.Packets;
|
using OpenMetaverse.Packets;
|
||||||
using log4net;
|
using log4net;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Serialization.External;
|
||||||
using OpenSim.Region.Framework;
|
using OpenSim.Region.Framework;
|
||||||
using OpenSim.Framework.Client;
|
using OpenSim.Framework.Client;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
|
@ -2225,7 +2226,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
bbox = Vector3.Zero;
|
bbox = Vector3.Zero;
|
||||||
offsetHeight = 0;
|
offsetHeight = 0;
|
||||||
|
|
||||||
string xmlData = Utils.BytesToString(assetData);
|
string xmlData = ExternalRepresentationUtils.SanitizeXml(Utils.BytesToString(assetData));
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -60,7 +60,8 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
/// <returns>The scene object deserialized. Null on failure.</returns>
|
/// <returns>The scene object deserialized. Null on failure.</returns>
|
||||||
public static SceneObjectGroup FromOriginalXmlFormat(string xmlData)
|
public static SceneObjectGroup FromOriginalXmlFormat(string xmlData)
|
||||||
{
|
{
|
||||||
using (XmlTextReader wrappedReader = new XmlTextReader(xmlData, XmlNodeType.Element, null))
|
String fixedData = ExternalRepresentationUtils.SanitizeXml(xmlData);
|
||||||
|
using (XmlTextReader wrappedReader = new XmlTextReader(fixedData, XmlNodeType.Element, null))
|
||||||
using (XmlReader reader = XmlReader.Create(wrappedReader, new XmlReaderSettings() { IgnoreWhitespace = true, ConformanceLevel = ConformanceLevel.Fragment }))
|
using (XmlReader reader = XmlReader.Create(wrappedReader, new XmlReaderSettings() { IgnoreWhitespace = true, ConformanceLevel = ConformanceLevel.Fragment }))
|
||||||
return FromOriginalXmlFormat(reader);
|
return FromOriginalXmlFormat(reader);
|
||||||
}
|
}
|
||||||
|
@ -322,7 +323,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
List<SceneObjectGroup> sceneObjects = new List<SceneObjectGroup>();
|
List<SceneObjectGroup> sceneObjects = new List<SceneObjectGroup>();
|
||||||
CoalescedSceneObjects coa = null;
|
CoalescedSceneObjects coa = null;
|
||||||
|
|
||||||
string xmlData = Utils.BytesToString(data);
|
string xmlData = ExternalRepresentationUtils.SanitizeXml(Utils.BytesToString(data));
|
||||||
|
|
||||||
if (CoalescedSceneObjectsSerializer.TryFromXml(xmlData, out coa))
|
if (CoalescedSceneObjectsSerializer.TryFromXml(xmlData, out coa))
|
||||||
{
|
{
|
||||||
|
|
|
@ -129,6 +129,14 @@ namespace OpenSim.Services.HypergridService
|
||||||
if (!m_AssetPerms.AllowedExport(asset.Type))
|
if (!m_AssetPerms.AllowedExport(asset.Type))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
// Deal with bug introduced in Oct. 20 (1eb3e6cc43e2a7b4053bc1185c7c88e22356c5e8)
|
||||||
|
// Fix bad assets before sending them elsewhere
|
||||||
|
if (asset.Type == (int)AssetType.Object && asset.Data != null)
|
||||||
|
{
|
||||||
|
string xml = ExternalRepresentationUtils.SanitizeXml(Utils.BytesToString(asset.Data));
|
||||||
|
asset.Data = Utils.StringToBytes(xml);
|
||||||
|
}
|
||||||
|
|
||||||
return asset.Data;
|
return asset.Data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,6 +147,14 @@ namespace OpenSim.Services.HypergridService
|
||||||
if (!m_AssetPerms.AllowedImport(asset.Type))
|
if (!m_AssetPerms.AllowedImport(asset.Type))
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
|
|
||||||
|
// Deal with bug introduced in Oct. 20 (1eb3e6cc43e2a7b4053bc1185c7c88e22356c5e8)
|
||||||
|
// Fix bad assets before storing on this server
|
||||||
|
if (asset.Type == (int)AssetType.Object && asset.Data != null)
|
||||||
|
{
|
||||||
|
string xml = ExternalRepresentationUtils.SanitizeXml(Utils.BytesToString(asset.Data));
|
||||||
|
asset.Data = Utils.StringToBytes(xml);
|
||||||
|
}
|
||||||
|
|
||||||
return base.Store(asset);
|
return base.Store(asset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,9 +176,15 @@ namespace OpenSim.Services.HypergridService
|
||||||
meta.CreatorID = meta.CreatorID + ";" + m_HomeURL + "/" + creator.FirstName + " " + creator.LastName;
|
meta.CreatorID = meta.CreatorID + ";" + m_HomeURL + "/" + creator.FirstName + " " + creator.LastName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only for Object
|
||||||
protected byte[] AdjustIdentifiers(byte[] data)
|
protected byte[] AdjustIdentifiers(byte[] data)
|
||||||
{
|
{
|
||||||
string xml = Utils.BytesToString(data);
|
string xml = Utils.BytesToString(data);
|
||||||
|
|
||||||
|
// Deal with bug introduced in Oct. 20 (1eb3e6cc43e2a7b4053bc1185c7c88e22356c5e8)
|
||||||
|
// Fix bad assets before sending them elsewhere
|
||||||
|
xml = ExternalRepresentationUtils.SanitizeXml(xml);
|
||||||
|
|
||||||
return Utils.StringToBytes(ExternalRepresentationUtils.RewriteSOP(xml, "HGAssetService", m_HomeURL, m_Cache, UUID.Zero));
|
return Utils.StringToBytes(ExternalRepresentationUtils.RewriteSOP(xml, "HGAssetService", m_HomeURL, m_Cache, UUID.Zero));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue