From da5ce0e74c3da94d4016910eaee0537a747d7316 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 14 Oct 2020 14:00:14 +0100 Subject: [PATCH] Escape and truncate any multiline strings in SPIR-V disassembly --- .../shaders/spirv/spirv_disassemble.cpp | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index b766e94bf..c3622f54a 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -133,7 +133,35 @@ rdcstr Reflector::Disassemble(const rdcstr &entryPoint, // otherwise try the string rdcstr ret = strings[id]; if(!ret.empty()) + { + // escape and truncate any multiline strings + if(ret.indexOf('\n') >= 0 || ret.indexOf('\r') >= 0) + { + rdcstr escaped = "\""; + + for(int i = 0; i < ret.size(); i++) + { + if(i == 100 && i + 1 < ret.size()) + { + escaped += "..."; + break; + } + + if(ret[i] == '\r') + escaped += "\\r"; + else if(ret[i] == '\t') + escaped += "\\t"; + else if(ret[i] == '\n') + escaped += "\\n"; + else + escaped += ret[i]; + } + + escaped.push_back('"'); + return escaped; + } return ret; + } // for non specialised constants, see if we can stringise them directly if they're unnamed ret = StringiseConstant(id);