Skip to content

Commit 1495265

Browse files
author
runrevali
committed
[[ Bug 13454 ]] Delete created handler parameter variables before deleting their containers to prevent memory leak
1 parent 24d2067 commit 1495265

2 files changed

Lines changed: 11 additions & 0 deletions

File tree

docs/notes/bugfix-13454.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Memory leaks in handler parameter creation

engine/src/handler.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,12 @@ Exec_stat MCHandler::exec(MCExecContext& ctxt, MCParameter *plist)
367367
if (err)
368368
{
369369
while (i--)
370+
{
371+
// AL-2014-09-16: [[ Bug 13454 ]] Delete created variables before deleting containers to prevent memory leak
372+
if (i >= npnames || !pinfo[i].is_reference)
373+
delete newparams[i] -> getvar();
370374
delete newparams[i];
375+
}
371376
delete newparams;
372377
MCeerror->add(EE_HANDLER_BADPARAM, firstline - 1, 1, name);
373378
return ES_ERROR;
@@ -495,7 +500,12 @@ Exec_stat MCHandler::exec(MCExecContext& ctxt, MCParameter *plist)
495500
// AL-2014-08-20: [[ ArrayElementRefParams ]] A container is always created for each parameter,
496501
// so delete them all when the handler has finished executing
497502
while (i--)
503+
{
504+
// AL-2014-09-16: [[ Bug 13454 ]] Delete created variables before deleting containers to prevent memory leak
505+
if (i >= npnames || !pinfo[i].is_reference)
506+
delete params[i] -> getvar();
498507
delete params[i];
508+
}
499509
delete params;
500510
}
501511
if (vars != NULL)

0 commit comments

Comments
 (0)