Skip to content

Commit f9ae7ee

Browse files
Fix memory OOB access
1 parent 5d29fd0 commit f9ae7ee

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

include/nbl/asset/utils/IShaderCompiler.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,8 @@ class NBL_API2 IShaderCompiler : public core::IReferenceCounted
210210
template<typename... Args>
211211
static core::smart_refctd_ptr<ICPUShader> createOverridenCopy(const ICPUShader* original, uint32_t position, const char* fmt, Args... args)
212212
{
213-
assert(original == nullptr || (!original->isADummyObjectForCache() && original->isContentHighLevelLanguage()));
213+
if (!original || original->isADummyObjectForCache() || !original->isContentHighLevelLanguage())
214+
return nullptr;
214215

215216
constexpr auto getMaxSize = [](auto num) -> size_t
216217
{
@@ -230,12 +231,13 @@ class NBL_API2 IShaderCompiler : public core::IReferenceCounted
230231
}
231232
};
232233
constexpr size_t templateArgsCount = sizeof...(Args);
233-
size_t origLen = original ? original->getContent()->getSize():0u;
234-
size_t formatArgsCharSize = (getMaxSize(args) + ...);
235-
size_t formatSize = strlen(fmt);
234+
const size_t origLen = original ? original->getContent()->getSize():0u;
235+
const size_t formatArgsCharSize = (getMaxSize(args) + ...);
236+
const size_t formatSize = strlen(fmt);
236237
// 2 is an average size of a format (% and a letter) in chars.
237238
// Assuming the format contains only one letter, but if it's 2, the outSize is gonna be a touch bigger.
238-
size_t outSize = origLen + formatArgsCharSize + formatSize - 2 * templateArgsCount;
239+
constexpr size_t nullTerminatorSize = 1u;
240+
size_t outSize = origLen + formatArgsCharSize + formatSize + nullTerminatorSize - 2 * templateArgsCount;
239241

240242
nbl::core::smart_refctd_ptr<ICPUBuffer> outBuffer = nbl::core::make_smart_refctd_ptr<ICPUBuffer>(outSize);
241243

src/nbl/video/CVulkanLogicalDevice.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,9 @@ class CVulkanLogicalDevice final : public ILogicalDevice
680680

681681
core::smart_refctd_ptr<IGPUShader> createShader(core::smart_refctd_ptr<asset::ICPUShader>&& cpushader) override
682682
{
683+
if (!cpushader)
684+
return nullptr;
685+
683686
const char* entryPoint = "main";
684687
const asset::IShader::E_SHADER_STAGE shaderStage = cpushader->getStage();
685688

0 commit comments

Comments
 (0)