diff options
author | Shauren <shauren.trinity@gmail.com> | 2017-02-26 15:00:46 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2017-02-26 15:00:46 +0100 |
commit | bc2380e105404535ebb89b6a379ba9bc9454acfc (patch) | |
tree | 0ba852c56d2813b8a23bae763c7301676d5e394e /src | |
parent | 047c6f072ba08e0a939cd29d268bb687a7ea7a85 (diff) |
Core/DataStores: Fixed Meta->Types/TypesString mixup causing crashes when trying to send hotfix for nonlocalized string
Closes #18882 (for real this time)
Diffstat (limited to 'src')
-rw-r--r-- | src/common/DataStores/DB2Meta.cpp | 5 | ||||
-rw-r--r-- | src/server/shared/DataStores/DB2StorageLoader.cpp | 24 | ||||
-rw-r--r-- | src/server/shared/DataStores/DB2Store.h | 2 |
3 files changed, 21 insertions, 10 deletions
diff --git a/src/common/DataStores/DB2Meta.cpp b/src/common/DataStores/DB2Meta.cpp index 2b6f635a99f..48a1c3172a4 100644 --- a/src/common/DataStores/DB2Meta.cpp +++ b/src/common/DataStores/DB2Meta.cpp @@ -16,6 +16,7 @@ */ #include "DB2Meta.h" +#include "Errors.h" DB2Meta::DB2Meta(int32 indexField, uint32 fieldCount, uint32 layoutHash, char const* types, uint8 const* arraySizes) : IndexField(indexField), FieldCount(fieldCount), LayoutHash(layoutHash), Types(types), ArraySizes(arraySizes) @@ -52,9 +53,11 @@ uint32 DB2Meta::GetRecordSize() const size += 4; break; case FT_STRING: - case FT_STRING_NOT_LOCALIZED: size += sizeof(char*); break; + default: + ASSERT(false, "Unsupported column type specified %c", Types[i]); + break; } } } diff --git a/src/server/shared/DataStores/DB2StorageLoader.cpp b/src/server/shared/DataStores/DB2StorageLoader.cpp index 6b912e7dde1..11caca97afb 100644 --- a/src/server/shared/DataStores/DB2StorageLoader.cpp +++ b/src/server/shared/DataStores/DB2StorageLoader.cpp @@ -396,7 +396,7 @@ char* DB2FileLoaderRegularImpl::AutoProduceData(uint32& records, char**& indexTa break; } default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->Meta->Types[x], fileName); + ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->TypesString[x], fileName); break; } ++fieldIndex; @@ -481,7 +481,7 @@ char* DB2FileLoaderRegularImpl::AutoProduceStrings(char* dataTable, uint32 local break; } default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->Meta->Types[x], fileName); + ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->TypesString[x], fileName); break; } ++fieldIndex; @@ -619,10 +619,12 @@ char* DB2FileLoaderSparseImpl::AutoProduceData(uint32& maxId, char**& indexTable std::size_t fieldOffset = 0; uint32 stringFieldOffset = 0; + uint32 fieldIndex = 0; if (!_loadInfo->Meta->HasIndexFieldInData()) { *((uint32*)(&dataTable[offset])) = y + _header->MinId; offset += 4; + ++fieldIndex; } for (uint32 x = 0; x < _header->FieldCount; ++x) @@ -630,7 +632,7 @@ char* DB2FileLoaderSparseImpl::AutoProduceData(uint32& maxId, char**& indexTable uint16 fieldBytes = 4 - fields[x].UnusedBits / 8; for (uint32 z = 0; z < _loadInfo->Meta->ArraySizes[x]; ++z) { - switch (_loadInfo->Meta->Types[x]) + switch (_loadInfo->TypesString[fieldIndex]) { case FT_FLOAT: { @@ -724,9 +726,10 @@ char* DB2FileLoaderSparseImpl::AutoProduceData(uint32& maxId, char**& indexTable break; } default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->Meta->Types[x], fileName); + ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->TypesString[x], fileName); break; } + ++fieldIndex; } } @@ -777,15 +780,19 @@ char* DB2FileLoaderSparseImpl::AutoProduceStrings(char* dataTable, uint32 locale if (!offsets[y].FileOffset || !offsets[y].RecordSize) continue; + uint32 fieldIndex = 0; if (!_loadInfo->Meta->HasIndexFieldInData()) + { offset += 4; + ++fieldIndex; + } std::size_t fieldOffset = 0; for (uint32 x = 0; x < _header->FieldCount; ++x) { for (uint32 z = 0; z < _loadInfo->Meta->ArraySizes[x]; ++z) { - switch (_loadInfo->Meta->Types[x]) + switch (_loadInfo->TypesString[fieldIndex]) { case FT_FLOAT: offset += 4; @@ -820,9 +827,10 @@ char* DB2FileLoaderSparseImpl::AutoProduceStrings(char* dataTable, uint32 locale break; } default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->Meta->Types[x], fileName); + ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->TypesString[x], fileName); break; } + ++fieldIndex; } } } @@ -958,7 +966,7 @@ char* DB2DatabaseLoader::Load(uint32& records, char**& indexTable, char*& string break; } default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->Meta->Types[x], _storageName.c_str()); + ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->TypesString[x], _storageName.c_str()); break; } ++f; @@ -1059,7 +1067,7 @@ void DB2DatabaseLoader::LoadStrings(uint32 locale, uint32 records, char** indexT offset += sizeof(char*); break; default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->Meta->Types[x], _storageName.c_str()); + ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->TypesString[x], _storageName.c_str()); break; } ++fieldIndex; diff --git a/src/server/shared/DataStores/DB2Store.h b/src/server/shared/DataStores/DB2Store.h index 2b2c71e2324..c12b83102a2 100644 --- a/src/server/shared/DataStores/DB2Store.h +++ b/src/server/shared/DataStores/DB2Store.h @@ -70,7 +70,7 @@ protected: { for (uint32 a = 0; a < _loadInfo.Meta->ArraySizes[i]; ++a) { - switch (_loadInfo.Meta->Types[i]) + switch (_loadInfo.TypesString[i]) { case FT_INT: buffer << *(uint32*)entry; |