From e96fa717d387bff99b9a0fa47f422c863e0f2725 Mon Sep 17 00:00:00 2001 From: dan sinclair Date: Mon, 7 Jan 2019 11:47:37 -0500 Subject: [PATCH] Make sure source strings are terminated (#1641) * Make sure source strings are terminated The source strings may or may not have a null terminator. We need to make sure we add one before outputting the source strings as we iterate over the c-str looking for the null terminator. * Review feedback --- glslang/MachineIndependent/ShaderLang.cpp | 7 +++++-- glslang/MachineIndependent/localintermediate.h | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 0085c08d..3d93aa29 100755 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -879,8 +879,11 @@ bool ProcessDeferred( intermediate.setHlslOffsets(); if (messages & EShMsgDebugInfo) { intermediate.setSourceFile(names[numPre]); - for (int s = 0; s < numStrings; ++s) - intermediate.addSourceText(strings[numPre + s]); + for (int s = 0; s < numStrings; ++s) { + // The string may not be null-terminated, so make sure we provide + // the length along with the string. + intermediate.addSourceText(strings[numPre + s], lengths[numPre + s]); + } } SetupBuiltinSymbolTable(version, profile, spvVersion, source); diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index eb8fe0b1..589264c3 100755 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -666,7 +666,7 @@ public: void setSourceFile(const char* file) { if (file != nullptr) sourceFile = file; } const std::string& getSourceFile() const { return sourceFile; } - void addSourceText(const char* text) { sourceText = sourceText + text; } + void addSourceText(const char* text, size_t len) { sourceText.append(text, len); } const std::string& getSourceText() const { return sourceText; } const std::map& getIncludeText() const { return includeText; } void addIncludeText(const char* name, const char* text, size_t len) { includeText[name].assign(text,len); }