aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-02-26 15:00:46 +0100
committerShauren <shauren.trinity@gmail.com>2017-02-26 15:00:46 +0100
commitbc2380e105404535ebb89b6a379ba9bc9454acfc (patch)
tree0ba852c56d2813b8a23bae763c7301676d5e394e /src
parent047c6f072ba08e0a939cd29d268bb687a7ea7a85 (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.cpp5
-rw-r--r--src/server/shared/DataStores/DB2StorageLoader.cpp24
-rw-r--r--src/server/shared/DataStores/DB2Store.h2
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;