1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-19 21:23:52 +00:00

[Server] Fix memory leak in GetCellStateDescription()

This commit is contained in:
Koncord 2017-01-27 19:05:18 +08:00
parent 268a1501ad
commit 1c810ecad5
2 changed files with 7 additions and 6 deletions

View file

@ -16,7 +16,7 @@ unsigned int CellFunctions::GetCellStateChangesSize(unsigned short pid) noexcept
return player->cellStateChanges.count; return player->cellStateChanges.count;
} }
char *CellFunctions::GetCellStateDescription(unsigned short pid, unsigned int i) noexcept const char *CellFunctions::GetCellStateDescription(unsigned short pid, unsigned int i) noexcept
{ {
Player *player; Player *player;
GET_PLAYER(pid, player, ""); GET_PLAYER(pid, player, "");
@ -24,12 +24,13 @@ char *CellFunctions::GetCellStateDescription(unsigned short pid, unsigned int i)
if (i >= player->cellStateChanges.count) if (i >= player->cellStateChanges.count)
return "invalid"; return "invalid";
std::string cellDescription = player->cellStateChanges.cells.at(i).getDescription(); string cellDescription = player->cellStateChanges.cells.at(i).getDescription();
char *cstrDescription = new char[cellDescription.length() + 1]; static vector<char> cstrDescription;
std::strcpy(cstrDescription, cellDescription.c_str()); cstrDescription.reserve(cellDescription.size());
strncpy(&cstrDescription[0], cellDescription.c_str(), cstrDescription.capacity());
return cstrDescription; return &cstrDescription[0];
} }
const char *CellFunctions::GetCell(unsigned short pid) noexcept const char *CellFunctions::GetCell(unsigned short pid) noexcept

View file

@ -23,7 +23,7 @@ class CellFunctions
public: public:
static unsigned int GetCellStateChangesSize(unsigned short pid) noexcept; static unsigned int GetCellStateChangesSize(unsigned short pid) noexcept;
static char *GetCellStateDescription(unsigned short pid, unsigned int i) noexcept; static const char *GetCellStateDescription(unsigned short pid, unsigned int i) noexcept;
static const char *GetCell(unsigned short pid) noexcept; static const char *GetCell(unsigned short pid) noexcept;
static void SetCell(unsigned short pid, const char *name) noexcept; static void SetCell(unsigned short pid, const char *name) noexcept;