Fix memory leak in Regex extension. (#572)

* Fix memory leak in Regex extension.

"x" is never deleted when compile fails.

* Handle handle allocation failures.

Handle allocation failures also result in memory leaks.

* Fix typo.
This commit is contained in:
WildCard65 2017-01-11 21:25:46 -05:00 committed by Nicholas Hastings
parent ad3588d0aa
commit fd399b9b4b

View File

@ -87,10 +87,20 @@ static cell_t CompileRegex(IPluginContext *pCtx, const cell_t *params)
const char *err = x->mError;
*eOff = x->mErrorOffset;
pCtx->StringToLocal(params[3], params[4], err ? err:"unknown");
delete x;
return 0;
}
return g_pHandleSys->CreateHandle(g_RegexHandle, (void*)x, pCtx->GetIdentity(), myself->GetIdentity(), NULL);
HandleError error = HandleError_None;
Handle_t regexHandle = g_pHandleSys->CreateHandle(g_RegexHandle, (void*)x, pCtx->GetIdentity(), myself->GetIdentity(), &error);
if (!regexHandle || error != HandleError_None)
{
delete x;
pCtx->ReportError("Allocation of regex handle failed, error code #%d", error);
return 0;
}
return regexHandle;
}