From 10bbf0ed6e5028017bbeb4911c555b329ff8e5ce Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Fri, 2 Oct 2020 14:48:29 -0400 Subject: [PATCH] d3d11: Fix possible leaks after compiling shaders --- mojoshader_d3d11.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mojoshader_d3d11.c b/mojoshader_d3d11.c index a3f924c..372a4bc 100644 --- a/mojoshader_d3d11.c +++ b/mojoshader_d3d11.c @@ -504,10 +504,12 @@ static ID3D11PixelShader *compilePixelShader(MOJOSHADER_d3d11Shader *vshader, pshader->parseData->mainfn, "ps_4_0", D3D_SKIP_OPT, 0, &blob, &blob); + if (needs_free) + ctx->free_fn((void *) source, ctx->malloc_data); + if (result < 0) { set_error((const char *) ID3D10Blob_GetBufferPointer(blob)); - ctx->free_fn((void *) source, ctx->malloc_data); return NULL; } // if @@ -517,8 +519,6 @@ static ID3D11PixelShader *compilePixelShader(MOJOSHADER_d3d11Shader *vshader, NULL, &retval); ID3D10Blob_Release(blob); - if (needs_free) - ctx->free_fn((void *) source, ctx->malloc_data); return retval; } // compilePixelShader @@ -836,6 +836,8 @@ void MOJOSHADER_d3d11CompileVertexShader(unsigned long long inputLayoutHash, vshader->shaderMaps[vshader->numMaps].vertex.layoutHash = inputLayoutHash; ID3D11VertexShader *vs = compileVertexShader(vshader, newSource, srcLength, &blob); + if (newSource != origSource) + ctx->free_fn((void *) newSource, ctx->malloc_data); vshader->shaderMaps[ctx->vertexShader->numMaps].val = vs; vshader->shaderMaps[ctx->vertexShader->numMaps].vertex.blob = blob; ctx->vertexShader->numMaps++;