[Bug Fix] Fix use-after-free corruption with some DB calls (#1335)

This commit is contained in:
Michael Cook (mackal)
2021-04-27 19:53:34 -04:00
committed by GitHub
parent c063d9512e
commit 4358e24dab
6 changed files with 30 additions and 23 deletions
+4 -3
View File
@@ -3033,9 +3033,9 @@ XS(XS__getnpcnamebyid) {
dXSTARG;
uint32 npc_id = (int) SvIV(ST(0));
const char *npc_name = quest_manager.getnpcnamebyid(npc_id);
auto npc_name = quest_manager.getnpcnamebyid(npc_id);
sv_setpv(TARG, npc_name);
sv_setpv(TARG, npc_name.c_str());
XSprePUSH;
PUSHTARG;
XSRETURN(1);
@@ -3423,8 +3423,9 @@ XS(XS__getcharnamebyid) {
Const_char *RETVAL;
uint32 char_id = (int) SvUV(ST(0));
auto name = quest_manager.getcharnamebyid(char_id);
RETVAL = quest_manager.getcharnamebyid(char_id);
RETVAL = name.c_str();
sv_setpv(TARG, RETVAL);
XSprePUSH;
+2 -2
View File
@@ -901,7 +901,7 @@ bool lua_delete_data(std::string bucket_key) {
return DataBucket::DeleteData(bucket_key);
}
const char *lua_get_char_name_by_id(uint32 char_id) {
std::string lua_get_char_name_by_id(uint32 char_id) {
return database.GetCharNameByID(char_id);
}
@@ -937,7 +937,7 @@ int lua_get_group_id_by_char_id(uint32 char_id) {
return database.GetGroupIDByCharID(char_id);
}
const char *lua_get_npc_name_by_id(uint32 npc_id) {
std::string lua_get_npc_name_by_id(uint32 npc_id) {
return quest_manager.getnpcnamebyid(npc_id);
}
+8 -6
View File
@@ -2781,11 +2781,12 @@ std::string QuestManager::getitemname(uint32 item_id) {
return item_name;
}
const char *QuestManager::getnpcnamebyid(uint32 npc_id) {
std::string QuestManager::getnpcnamebyid(uint32 npc_id) {
std::string res;
if (npc_id > 0) {
return database.GetNPCNameByID(npc_id);
res = database.GetNPCNameByID(npc_id);
}
return "";
return res;
}
uint16 QuestManager::CreateInstance(const char *zone, int16 version, uint32 duration)
@@ -2991,11 +2992,12 @@ std::string QuestManager::saylink(char *saylink_text, bool silent, const char *l
return EQ::SayLinkEngine::GenerateQuestSaylink(saylink_text, silent, link_name);
}
const char* QuestManager::getcharnamebyid(uint32 char_id) {
std::string QuestManager::getcharnamebyid(uint32 char_id) {
std::string res;
if (char_id > 0) {
return database.GetCharNameByID(char_id);
res = database.GetCharNameByID(char_id);
}
return "";
return res;
}
uint32 QuestManager::getcharidbyname(const char* name) {
+2 -2
View File
@@ -265,7 +265,7 @@ public:
void FlagInstanceByRaidLeader(uint32 zone, int16 version);
const char* varlink(char* perltext, int item_id);
std::string saylink(char *saylink_text, bool silent, const char *link_name);
const char* getcharnamebyid(uint32 char_id);
std::string getcharnamebyid(uint32 char_id);
uint32 getcharidbyname(const char* name);
std::string getclassname(uint8 class_id, uint8 level = 0);
int getcurrencyid(uint32 item_id);
@@ -273,7 +273,7 @@ public:
const char* getguildnamebyid(int guild_id);
int getguildidbycharid(uint32 char_id);
int getgroupidbycharid(uint32 char_id);
const char* getnpcnamebyid(uint32 npc_id);
std::string getnpcnamebyid(uint32 npc_id);
int getraididbycharid(uint32 char_id);
void SetRunning(bool val);
bool IsRunning();