Have OpenSim throw a strop if it tries to load an OAR with a major version that is too high for it to handle

viewer-2-initial-appearance
Justin Clark-Casey (justincc) 2010-10-16 04:59:51 +01:00
parent 1bd4219078
commit 3df8d8ff76
2 changed files with 23 additions and 1 deletions

View File

@ -52,6 +52,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
/// <summary>
/// The maximum major version of OAR that we can read. Minor versions shouldn't need a number since version
/// bumps here should be compatible.
/// </summary>
public static int MAX_MAJOR_VERSION = 0;
protected Scene m_scene; protected Scene m_scene;
protected Stream m_loadStream; protected Stream m_loadStream;
protected Guid m_requestId; protected Guid m_requestId;
@ -497,6 +503,22 @@ namespace OpenSim.Region.CoreModules.World.Archiver
{ {
if (xtr.NodeType == XmlNodeType.Element) if (xtr.NodeType == XmlNodeType.Element)
{ {
if (xtr.Name.ToString() == "archive")
{
int majorVersion = int.Parse(xtr["major_version"]);
int minorVersion = int.Parse(xtr["minor_version"]);
string version = string.Format("{0}.{1}", majorVersion, minorVersion);
if (majorVersion > MAX_MAJOR_VERSION)
{
throw new Exception(
string.Format(
"The OAR you are trying to load has major version number of {0} but this version of OpenSim can only load OARs with major version number {1} and below",
majorVersion, MAX_MAJOR_VERSION));
}
m_log.InfoFormat("[ARCHIVER]: Loading OAR with version {0}", version);
}
if (xtr.Name.ToString() == "datetime") if (xtr.Name.ToString() == "datetime")
{ {
int value; int value;

View File

@ -181,7 +181,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
} }
/// <summary> /// <summary>
/// Create the control file for a 0.2 version archive /// Create the control file for the most up to date archive
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public static string Create0p2ControlFile() public static string Create0p2ControlFile()