diff options
author | Shauren <shauren.trinity@gmail.com> | 2017-03-02 19:48:58 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2017-03-02 19:48:58 +0100 |
commit | 2c27c5b5b99c3987c48fdf5300264a3f46f4685c (patch) | |
tree | 28640065465c22d8a1ad14a28007400273b00e89 /src | |
parent | 59d48ce7e42a7bf68f47254de518780631572545 (diff) |
Core/DataStores: Fixed crash in hotfix packet building
Closes #19218
Diffstat (limited to 'src')
-rw-r--r-- | src/server/shared/DataStores/DB2Store.h | 75 |
1 files changed, 38 insertions, 37 deletions
diff --git a/src/server/shared/DataStores/DB2Store.h b/src/server/shared/DataStores/DB2Store.h index c12b83102a2..7011a3b6e61 100644 --- a/src/server/shared/DataStores/DB2Store.h +++ b/src/server/shared/DataStores/DB2Store.h @@ -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; + ++i; + } - for (uint32 i = 0; i < _loadInfo.Meta->FieldCount; ++i) + for (; i < _loadInfo.FieldCount; ++i) { - for (uint32 a = 0; a < _loadInfo.Meta->ArraySizes[i]; ++a) + switch (_loadInfo.TypesString[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: { - 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; - } + buffer << *(char const**)entry; + entry += sizeof(char const*); + break; } } } |