From fd399b9b4ba973b059543e58a425dd42e0a3f8d6 Mon Sep 17 00:00:00 2001 From: WildCard65 Date: Wed, 11 Jan 2017 21:25:46 -0500 Subject: [PATCH] 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. --- extensions/regex/extension.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/extensions/regex/extension.cpp b/extensions/regex/extension.cpp index 2b43f845..c35015b8 100644 --- a/extensions/regex/extension.cpp +++ b/extensions/regex/extension.cpp @@ -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; }