From ffdd0a11ea94c1b3a6ae69ae7bb494e15908fd87 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 24 Nov 2022 23:50:52 +0100 Subject: [PATCH] - fixed memory leak in ZScript backend. This allocated some memory and never freed it again. A TArray would have been better - but since we know the maximum size is 4 we may just use a static array here to keep things as efficient as possible. --- src/common/scripting/backend/codegen.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/common/scripting/backend/codegen.cpp b/src/common/scripting/backend/codegen.cpp index c993ad093..2bc262c96 100644 --- a/src/common/scripting/backend/codegen.cpp +++ b/src/common/scripting/backend/codegen.cpp @@ -723,16 +723,17 @@ ExpEmit FxVectorValue::Emit(VMFunctionBuilder *build) { if (e) vectorElements++; } - assert(vectorElements > 0); + assert(vectorElements > 0 && vectorElements <= 4); - ExpEmit* tempVal = (ExpEmit*)calloc(vectorElements, sizeof(ExpEmit)); - ExpEmit* val = (ExpEmit*)calloc(vectorElements, sizeof(ExpEmit)); + // We got at most 4 elements + ExpEmit tempVal[4]; + ExpEmit val[4]; // Init ExpEmit for (int i = 0; i < vectorElements; ++i) { - new(tempVal + i) ExpEmit(xyzw[i]->Emit(build)); - new(val + i) ExpEmit(EmitKonst(build, tempVal[i])); + tempVal[i] = ExpEmit(xyzw[i]->Emit(build)); + val[i] = EmitKonst(build, tempVal[i]); } {