* 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,31 +154,44 @@ 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;
string methodName = xmlRprcRequest.MethodName; try
XmlRpcResponse xmlRpcResponse;
XmlRpcMethod method;
if (this.m_rpcHandlers.TryGetValue(methodName, out method))
{ {
xmlRpcResponse = method(xmlRprcRequest); xmlRprcRequest = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody);
} }
else catch ( XmlException e )
{ {
xmlRpcResponse = new XmlRpcResponse(); responseString = String.Format( "XmlException:\n{0}",e.Message );
Hashtable unknownMethodError = new Hashtable(); }
unknownMethodError["reason"] = "XmlRequest"; ;
unknownMethodError["message"] = "Unknown Rpc Request ["+methodName+"]"; if (xmlRprcRequest != null)
unknownMethodError["login"] = "false"; {
xmlRpcResponse.Value = unknownMethodError; string methodName = xmlRprcRequest.MethodName;
XmlRpcResponse xmlRpcResponse;
XmlRpcMethod method;
if (this.m_rpcHandlers.TryGetValue(methodName, out method))
{
xmlRpcResponse = method(xmlRprcRequest);
}
else
{
xmlRpcResponse = new XmlRpcResponse();
Hashtable unknownMethodError = new Hashtable();
unknownMethodError["reason"] = "XmlRequest"; ;
unknownMethodError["message"] = "Unknown Rpc Request [" + methodName + "]";
unknownMethodError["login"] = "false";
xmlRpcResponse.Value = unknownMethodError;
}
responseString = XmlRpcResponseSerializer.Singleton.Serialize(xmlRpcResponse);
} }
response.AddHeader("Content-type", "text/xml"); response.AddHeader("Content-type", "text/xml");
string responseString = XmlRpcResponseSerializer.Singleton.Serialize(xmlRpcResponse);
byte[] buffer = Encoding.UTF8.GetBytes(responseString); byte[] buffer = Encoding.UTF8.GetBytes(responseString);
response.SendChunked = false; response.SendChunked = false;