Fix invalid type lookup for empty type string. Closes #2947

This commit is contained in:
baldurk
2023-06-02 21:55:49 +01:00
parent 673503a5b5
commit 3f7e648d4d
+26 -11
View File
@@ -134,6 +134,30 @@ static void Config2XML(pugi::xml_node &parent, const SDObject &child)
}
}
static SDBasic getType(const char *typeStr)
{
if(!typeStr)
return SDBasic::Chunk;
const SDBasic types[] = {
SDBasic::Array, SDBasic::String, SDBasic::UnsignedInteger,
SDBasic::SignedInteger, SDBasic::Float, SDBasic::Boolean,
};
static rdcarray<rdcstr> basicTypeStrings;
if(basicTypeStrings.empty())
{
for(SDBasic t : types)
basicTypeStrings.push_back(ToStr(t));
}
int idx = basicTypeStrings.indexOf(typeStr);
if(idx >= 0)
return types[idx];
return SDBasic::Chunk;
}
static SDObject *XML2Config(pugi::xml_node &obj)
{
SDObject *ret =
@@ -172,20 +196,11 @@ static SDObject *XML2Config(pugi::xml_node &obj)
SDObject *valueObj = NULL;
const SDBasic types[] = {
SDBasic::Array, SDBasic::String, SDBasic::UnsignedInteger,
SDBasic::SignedInteger, SDBasic::Float, SDBasic::Boolean,
};
static rdcarray<rdcstr> basicTypeStrings;
for(SDBasic t : types)
basicTypeStrings.push_back(ToStr(t));
SDBasic type = types[basicTypeStrings.indexOf(obj.attribute("type").as_string())];
SDBasic type = getType(obj.attribute("type").as_string());
if(type == SDBasic::Array)
{
type = types[basicTypeStrings.indexOf(obj.attribute("elemtype").as_string())];
type = getType(obj.attribute("elemtype").as_string());
valueObj = makeSDArray("value"_lit);
uint32_t i = 0;