Core/DataStores: Fixed Meta->Types/TypesString mixup causing crashes when trying to send hotfix for nonlocalized string

Closes #18882 (for real this time)
This commit is contained in:
Shauren
2017-02-26 15:00:46 +01:00
parent 047c6f072b
commit bc2380e105
3 changed files with 21 additions and 10 deletions

View File

@@ -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;
}
}
}

View File

@@ -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;

View File

@@ -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;