Skip to content

Commit

Permalink
Fix invalid type lookup for empty type string. Closes #2947
Browse files Browse the repository at this point in the history
  • Loading branch information
baldurk committed Jun 2, 2023
1 parent 673503a commit 3f7e648
Showing 1 changed file with 26 additions and 11 deletions.
37 changes: 26 additions & 11 deletions renderdoc/core/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 3f7e648

Please sign in to comment.