aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-03-02 19:48:58 +0100
committerShauren <shauren.trinity@gmail.com>2017-03-02 19:48:58 +0100
commit2c27c5b5b99c3987c48fdf5300264a3f46f4685c (patch)
tree28640065465c22d8a1ad14a28007400273b00e89 /src
parent59d48ce7e42a7bf68f47254de518780631572545 (diff)
Core/DataStores: Fixed crash in hotfix packet building
Closes #19218
Diffstat (limited to 'src')
-rw-r--r--src/server/shared/DataStores/DB2Store.h75
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;
}
}
}