* Fixed: Accessing xmlrpc with invalid xml data would crash the sim.

* Ignored some bins and gens
afrisby
lbsa71 2007-09-10 04:30:11 +00:00
parent 86e3fc3da2
commit 7adc2212c7
1 changed files with 31 additions and 17 deletions

View File

@ -35,6 +35,7 @@ using System.Text.RegularExpressions;
using System.Threading; using System.Threading;
using Nwc.XmlRpc; using Nwc.XmlRpc;
using OpenSim.Framework.Console; using OpenSim.Framework.Console;
using System.Xml;
namespace OpenSim.Framework.Servers namespace OpenSim.Framework.Servers
{ {
@ -153,8 +154,20 @@ namespace OpenSim.Framework.Servers
reader.Close(); reader.Close();
requestStream.Close(); requestStream.Close();
XmlRpcRequest xmlRprcRequest = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody); string responseString = String.Empty;
XmlRpcRequest xmlRprcRequest = null;
try
{
xmlRprcRequest = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody);
}
catch ( XmlException e )
{
responseString = String.Format( "XmlException:\n{0}",e.Message );
}
if (xmlRprcRequest != null)
{
string methodName = xmlRprcRequest.MethodName; string methodName = xmlRprcRequest.MethodName;
XmlRpcResponse xmlRpcResponse; XmlRpcResponse xmlRpcResponse;
@ -169,14 +182,15 @@ namespace OpenSim.Framework.Servers
xmlRpcResponse = new XmlRpcResponse(); xmlRpcResponse = new XmlRpcResponse();
Hashtable unknownMethodError = new Hashtable(); Hashtable unknownMethodError = new Hashtable();
unknownMethodError["reason"] = "XmlRequest"; ; unknownMethodError["reason"] = "XmlRequest"; ;
unknownMethodError["message"] = "Unknown Rpc Request ["+methodName+"]"; unknownMethodError["message"] = "Unknown Rpc Request [" + methodName + "]";
unknownMethodError["login"] = "false"; unknownMethodError["login"] = "false";
xmlRpcResponse.Value = unknownMethodError; xmlRpcResponse.Value = unknownMethodError;
} }
response.AddHeader("Content-type", "text/xml"); responseString = XmlRpcResponseSerializer.Singleton.Serialize(xmlRpcResponse);
}
string responseString = XmlRpcResponseSerializer.Singleton.Serialize(xmlRpcResponse); response.AddHeader("Content-type", "text/xml");
byte[] buffer = Encoding.UTF8.GetBytes(responseString); byte[] buffer = Encoding.UTF8.GetBytes(responseString);