Compare commits

..

No commits in common. "1589466076e9b579764f3c20babc75979a9ed54c" and "bdf0bd27a119693e752872aab6c112e6b88d218b" have entirely different histories.

4 changed files with 54 additions and 57 deletions

View File

@ -987,53 +987,51 @@ void CGlueMgr::Resume() {
DeleteInterfaceFiles(); DeleteInterfaceFiles();
uint8_t digest1[16];
switch (FrameXML_CheckSignature("Interface\\GlueXML\\GlueXML.toc", nullptr, InterfaceKey, digest1)) {
case 0: {
status.Add(STATUS_WARNING, "GlueXML missing signature");
ClientPostClose(9);
return;
}
case 1: {
status.Add(STATUS_WARNING, "GlueXML has corrupt signature");
ClientPostClose(9);
return;
}
case 2: {
status.Add(STATUS_WARNING, "GlueXML is modified or corrupt");
ClientPostClose(9);
return;
}
case 3: {
// Success
break;
}
default: {
ClientPostClose(9);
return;
}
}
MD5_CTX md5; MD5_CTX md5;
unsigned char digest1[16];
unsigned char digest2[16];
int32_t v8;
unsigned char* v9;
unsigned char* v10;
MD5Init(&md5); MD5Init(&md5);
FrameXML_FreeHashNodes(); switch (FrameXML_CheckSignature("Interface\\GlueXML\\GlueXML.toc", nullptr, InterfaceKey, digest1)) {
case 0:
status.Add(STATUS_WARNING, "GlueXML missing signature");
ClientPostClose(9);
return;
FrameXML_CreateFrames("Interface\\GlueXML\\GlueXML.toc", nullptr, &md5, &status); case 1:
status.Add(STATUS_WARNING, "GlueXML has corrupt signature");
ClientPostClose(9);
return;
uint8_t digest2[16]; case 2:
MD5Final(digest2, &md5); status.Add(STATUS_WARNING, "GlueXML is modified or corrupt");
ClientPostClose(9);
return;
// TODO digest validation case 3:
FrameXML_FreeHashNodes();
FrameXML_CreateFrames("Interface\\GlueXML\\GlueXML.toc", 0, &md5, &status);
MD5Final(digest2, &md5);
v8 = 16;
v9 = digest2;
v10 = digest1;
break;
default:
ClientPostClose(9);
return;
}
// TODO
// - some kind of digest validation?
FrameScript_SignalEvent(22, nullptr); FrameScript_SignalEvent(22, nullptr);

View File

@ -5,12 +5,6 @@
int32_t FrameScript_Object::s_objectTypes = 0; int32_t FrameScript_Object::s_objectTypes = 0;
FrameScript_Object::ScriptIx::~ScriptIx() {
if (this->luaRef) {
luaL_unref(FrameScript_GetContext(), LUA_REGISTRYINDEX, this->luaRef);
}
}
int32_t FrameScript_Object::CreateScriptMetaTable(lua_State* L, void (*a2)(lua_State* L)) { int32_t FrameScript_Object::CreateScriptMetaTable(lua_State* L, void (*a2)(lua_State* L)) {
lua_createtable(L, 0, 0); lua_createtable(L, 0, 0);
lua_pushstring(L, "__index"); lua_pushstring(L, "__index");
@ -30,6 +24,12 @@ void FrameScript_Object::FillScriptMethodTable(lua_State *L, FrameScript_Method
} }
} }
FrameScript_Object::~FrameScript_Object() {
if (this->m_onEvent.luaRef) {
luaL_unref(FrameScript_GetContext(), LUA_REGISTRYINDEX, this->m_onEvent.luaRef);
}
}
const char* FrameScript_Object::GetDisplayName() { const char* FrameScript_Object::GetDisplayName() {
const char* name = this->GetName(); const char* name = this->GetName();
return name ? name : "<unnamed>"; return name ? name : "<unnamed>";

View File

@ -14,7 +14,6 @@ class FrameScript_Object {
struct ScriptIx { struct ScriptIx {
int32_t luaRef = 0; int32_t luaRef = 0;
const char* unk = nullptr; const char* unk = nullptr;
~ScriptIx();
}; };
class ScriptFunction { class ScriptFunction {
@ -35,7 +34,7 @@ class FrameScript_Object {
ScriptIx m_onEvent; ScriptIx m_onEvent;
// Virtual member functions // Virtual member functions
virtual ~FrameScript_Object() = default; virtual ~FrameScript_Object();
virtual char* GetName() = 0; virtual char* GetName() = 0;
virtual int32_t GetScriptMetaTable() = 0; virtual int32_t GetScriptMetaTable() = 0;
virtual ScriptIx* GetScriptByName(const char* name, ScriptData& data); virtual ScriptIx* GetScriptByName(const char* name, ScriptData& data);

View File

@ -24,28 +24,32 @@ void CGGameUI::Initialize() {
// TODO // TODO
MD5_CTX md5;
uint8_t digest1[16]; uint8_t digest1[16];
uint8_t digest2[16];
MD5Init(&md5);
switch (FrameXML_CheckSignature("Interface\\FrameXML\\FrameXML.toc", "Interface\\FrameXML\\Bindings.xml", InterfaceKey, digest1)) { switch (FrameXML_CheckSignature("Interface\\FrameXML\\FrameXML.toc", "Interface\\FrameXML\\Bindings.xml", InterfaceKey, digest1)) {
case 0: { case 0: {
status.Add(STATUS_WARNING, "FrameXML missing signature"); status.Add(STATUS_WARNING, "FrameXML missing signature");
ClientPostClose(10); ClientPostClose(10);
break; return;
} }
case 1: { case 1: {
status.Add(STATUS_WARNING, "FrameXML has corrupt signature"); status.Add(STATUS_WARNING, "FrameXML has corrupt signature");
ClientPostClose(10); ClientPostClose(10);
break; return;
} }
case 2: { case 2: {
status.Add(STATUS_WARNING, "FrameXML is modified or corrupt"); status.Add(STATUS_WARNING, "FrameXML is modified or corrupt");
ClientPostClose(10); ClientPostClose(10);
break; return;
} }
case 3: { case 3: {
@ -56,13 +60,10 @@ void CGGameUI::Initialize() {
default: { default: {
ClientPostClose(10); ClientPostClose(10);
break; return;
} }
} }
MD5_CTX md5;
MD5Init(&md5);
// TODO file count and progress bar logic // TODO file count and progress bar logic
FrameXML_FreeHashNodes(); FrameXML_FreeHashNodes();
@ -71,7 +72,6 @@ void CGGameUI::Initialize() {
// TODO CGUIBindings::s_bindings->Load("Interface\\FrameXML\\Bindings.xml", &md5, &status); // TODO CGUIBindings::s_bindings->Load("Interface\\FrameXML\\Bindings.xml", &md5, &status);
uint8_t digest2[16];
MD5Final(digest2, &md5); MD5Final(digest2, &md5);
// TODO digest validation // TODO digest validation