Core/DataStores: Fixed crash in hotfix packet building

Closes #19218
This commit is contained in:
Shauren
2017-03-02 19:48:58 +01:00
parent 59d48ce7e4
commit 2c27c5b5b9

View File

@@ -33,8 +33,8 @@ public:
virtual ~DB2StorageBase()
{
delete[] reinterpret_cast<char*>(_dataTable);
delete[] reinterpret_cast<char*>(_dataTableEx);
delete[] _dataTable;
delete[] _dataTableEx;
for (char* strings : _stringPool)
delete[] strings;
}
@@ -63,47 +63,48 @@ public:
protected:
void WriteRecordData(char const* entry, uint32 locale, ByteBuffer& buffer) const
{
std::size_t i = 0;
if (!_loadInfo.Meta->HasIndexFieldInData())
entry += 4;
for (uint32 i = 0; i < _loadInfo.Meta->FieldCount; ++i)
{
for (uint32 a = 0; a < _loadInfo.Meta->ArraySizes[i]; ++a)
{
switch (_loadInfo.TypesString[i])
{
case FT_INT:
buffer << *(uint32*)entry;
entry += 4;
break;
case FT_FLOAT:
buffer << *(float*)entry;
entry += 4;
break;
case FT_BYTE:
buffer << *(uint8*)entry;
entry += 1;
break;
case FT_SHORT:
buffer << *(uint16*)entry;
entry += 2;
break;
case FT_STRING:
{
LocalizedString* locStr = *(LocalizedString**)entry;
if (locStr->Str[locale][0] == '\0')
locale = 0;
entry += 4;
++i;
}
buffer << locStr->Str[locale];
entry += sizeof(LocalizedString*);
break;
}
case FT_STRING_NOT_LOCALIZED:
{
buffer << *(char const**)entry;
entry += sizeof(char const*);
break;
}
for (; i < _loadInfo.FieldCount; ++i)
{
switch (_loadInfo.TypesString[i])
{
case FT_INT:
buffer << *(uint32*)entry;
entry += 4;
break;
case FT_FLOAT:
buffer << *(float*)entry;
entry += 4;
break;
case FT_BYTE:
buffer << *(uint8*)entry;
entry += 1;
break;
case FT_SHORT:
buffer << *(uint16*)entry;
entry += 2;
break;
case FT_STRING:
{
LocalizedString* locStr = *(LocalizedString**)entry;
if (locStr->Str[locale][0] == '\0')
locale = 0;
buffer << locStr->Str[locale];
entry += sizeof(LocalizedString*);
break;
}
case FT_STRING_NOT_LOCALIZED:
{
buffer << *(char const**)entry;
entry += sizeof(char const*);
break;
}
}
}