From 3f7e648d4d87cffe7402ec9c65f7761b501ff6f4 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 2 Jun 2023 21:55:49 +0100 Subject: [PATCH] Fix invalid type lookup for empty type string. Closes #2947 --- renderdoc/core/settings.cpp | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/renderdoc/core/settings.cpp b/renderdoc/core/settings.cpp index d9bf7924e..e0ce24370 100644 --- a/renderdoc/core/settings.cpp +++ b/renderdoc/core/settings.cpp @@ -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 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 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;