Skip to content

Commit 1a7d23f

Browse files
committed
Fix issue with non properly null terminated code strings
1 parent 0a5ef2f commit 1a7d23f

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

src/nbl/asset/utils/CGLSLCompiler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ core::smart_refctd_ptr<ICPUShader> CGLSLCompiler::compileToSPIRV(const char* cod
143143
return nullptr;
144144
}
145145

146-
auto newCode = preprocessShader(code, glslOptions.stage, glslOptions.preprocessorOptions);
146+
auto newCode = preprocessShader(std::string(code), glslOptions.stage, glslOptions.preprocessorOptions);
147147

148148
shaderc::Compiler comp;
149149
shaderc::CompileOptions shadercOptions; //default options

src/nbl/video/CVulkanLogicalDevice.h

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,13 @@ class CVulkanLogicalDevice final : public ILogicalDevice
557557
}
558558
else
559559
{
560+
const char* begin = static_cast<const char*>(source->getPointer());
561+
const char* end = begin + source->getSize();
562+
std::string code(begin, end);
563+
564+
auto newCodeBuffer = core::make_smart_refctd_ptr<asset::CDummyCPUBuffer>(code.size() + 1u, code.data(), core::adopt_memory);
565+
auto newCPUShader = core::make_smart_refctd_ptr<asset::ICPUShader>(std::move(newCodeBuffer), cpushader->getStage(), cpushader->getContentType(), std::string(cpushader->getFilepathHint()));
566+
560567
auto compiler = m_compilerSet->getShaderCompiler(cpushader->getContentType());
561568

562569
asset::IShaderCompiler::SCompilerOptions commonCompileOptions = {};
@@ -574,14 +581,14 @@ class CVulkanLogicalDevice final : public ILogicalDevice
574581
if (cpushader->getContentType() == asset::ICPUShader::E_CONTENT_TYPE::ECT_HLSL)
575582
{
576583
// TODO: add specific HLSLCompiler::SOption params
577-
spirvShader = m_compilerSet->compileToSPIRV(cpushader.get(), commonCompileOptions);
584+
spirvShader = m_compilerSet->compileToSPIRV(newCPUShader.get(), commonCompileOptions);
578585
}
579586
else if (cpushader->getContentType() == asset::ICPUShader::E_CONTENT_TYPE::ECT_GLSL)
580587
{
581-
spirvShader = m_compilerSet->compileToSPIRV(cpushader.get(), commonCompileOptions);
588+
spirvShader = m_compilerSet->compileToSPIRV(newCPUShader.get(), commonCompileOptions);
582589
}
583590
else
584-
spirvShader = m_compilerSet->compileToSPIRV(cpushader.get(), commonCompileOptions);
591+
spirvShader = m_compilerSet->compileToSPIRV(newCPUShader.get(), commonCompileOptions);
585592

586593
}
587594

0 commit comments

Comments
 (0)