From 946db5461c8262d3b957e42ed7a90feb447c618b Mon Sep 17 00:00:00 2001 From: Jeff Ames Date: Sat, 17 Nov 2007 05:53:12 +0000 Subject: [PATCH] catch exceptions when loading malformed xml files --- .../Communications/Cache/AssetServerBase.cs | 34 ++++++++++++------- .../Communications/Cache/LibraryRootFolder.cs | 13 +++++-- OpenSim/Framework/ConfigurationMember.cs | 17 ++++++---- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/OpenSim/Framework/Communications/Cache/AssetServerBase.cs b/OpenSim/Framework/Communications/Cache/AssetServerBase.cs index 7692057076..1a20cee70a 100644 --- a/OpenSim/Framework/Communications/Cache/AssetServerBase.cs +++ b/OpenSim/Framework/Communications/Cache/AssetServerBase.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Threading; +using System.Xml; using libsecondlife; using Nini.Config; using OpenSim.Framework.Console; @@ -148,22 +149,29 @@ namespace OpenSim.Framework.Communications.Cache string filePath = Path.Combine(Util.configDir(), "OpenSimAssetSet.xml"); if (File.Exists(filePath)) { - XmlConfigSource source = new XmlConfigSource(filePath); - - for (int i = 0; i < source.Configs.Count; i++) + try { - // System.Console.WriteLine("loading asset into database"); - string assetIdStr = source.Configs[i].GetString("assetID", LLUUID.Random().ToStringHyphenated()); - string name = source.Configs[i].GetString("name", ""); - sbyte type = (sbyte) source.Configs[i].GetInt("assetType", 0); - sbyte invType = (sbyte) source.Configs[i].GetInt("inventoryType", 0); - string fileName = source.Configs[i].GetString("fileName", ""); + XmlConfigSource source = new XmlConfigSource(filePath); - AssetBase newAsset = CreateAsset(assetIdStr, name, fileName, false); + for (int i = 0; i < source.Configs.Count; i++) + { + // System.Console.WriteLine("loading asset into database"); + string assetIdStr = source.Configs[i].GetString("assetID", LLUUID.Random().ToStringHyphenated()); + string name = source.Configs[i].GetString("name", ""); + sbyte type = (sbyte) source.Configs[i].GetInt("assetType", 0); + sbyte invType = (sbyte) source.Configs[i].GetInt("inventoryType", 0); + string fileName = source.Configs[i].GetString("fileName", ""); - newAsset.Type = type; - newAsset.InvType = invType; - assets.Add(newAsset); + AssetBase newAsset = CreateAsset(assetIdStr, name, fileName, false); + + newAsset.Type = type; + newAsset.InvType = invType; + assets.Add(newAsset); + } + } + catch (XmlException e) + { + MainLog.Instance.Error("ASSETS", "Error loading " + filePath + ": " + e.ToString()); } } assets.ForEach(action); diff --git a/OpenSim/Framework/Communications/Cache/LibraryRootFolder.cs b/OpenSim/Framework/Communications/Cache/LibraryRootFolder.cs index 765c42e57e..05caa84d23 100644 --- a/OpenSim/Framework/Communications/Cache/LibraryRootFolder.cs +++ b/OpenSim/Framework/Communications/Cache/LibraryRootFolder.cs @@ -27,8 +27,10 @@ */ using System.IO; +using System.Xml; using libsecondlife; using Nini.Config; +using OpenSim.Framework.Console; namespace OpenSim.Framework.Communications.Cache { @@ -65,8 +67,15 @@ namespace OpenSim.Framework.Communications.Cache string filePath = Path.Combine(Util.configDir(), "OpenSimLibrary.xml"); if (File.Exists(filePath)) { - XmlConfigSource source = new XmlConfigSource(filePath); - ReadItemsFromFile(source); + try + { + XmlConfigSource source = new XmlConfigSource(filePath); + ReadItemsFromFile(source); + } + catch (XmlException e) + { + MainLog.Instance.Error("INVENTORY", "Error loading " + filePath + ": " + e.ToString()); + } } } diff --git a/OpenSim/Framework/ConfigurationMember.cs b/OpenSim/Framework/ConfigurationMember.cs index e4cd9d8c43..8e46a04223 100644 --- a/OpenSim/Framework/ConfigurationMember.cs +++ b/OpenSim/Framework/ConfigurationMember.cs @@ -166,8 +166,16 @@ namespace OpenSim.Framework if (configurationFilename.Trim() != "") { configurationPlugin.SetFileName(configurationFilename); - configurationPlugin.LoadData(); - useFile = true; + try + { + configurationPlugin.LoadData(); + useFile = true; + } + catch (XmlException e) + { + MainLog.Instance.Error("Error loading " + configurationFilename + ": " + e.ToString()); + useFile = false; + } } else { @@ -189,7 +197,6 @@ namespace OpenSim.Framework bool ignoreNextFromConfig = false; while (convertSuccess == false) { - string console_result = ""; string attribute = null; if (useFile || (!useFile && configurationFromXMLNode != null)) @@ -228,7 +235,6 @@ namespace OpenSim.Framework //Dont Ask! Just use default console_result = configOption.configurationDefault; } - } } else @@ -292,7 +298,6 @@ namespace OpenSim.Framework { convertSuccess = true; return_result = intResult; - } errorMessage = "a signed 32 bit integer (int)"; break; @@ -347,7 +352,6 @@ namespace OpenSim.Framework { convertSuccess = true; return_result = uintResult; - } errorMessage = "an unsigned 32 bit integer (uint)"; break; @@ -387,7 +391,6 @@ namespace OpenSim.Framework configurationPlugin.SetAttribute(configOption.configurationKey, console_result); } - if (!this.resultFunction(configOption.configurationKey, return_result)) { Console.MainLog.Instance.Notice("The handler for the last configuration option denied that input, please try again.");