Skip to content

Commit 9c0ed61

Browse files
author
Felipe Zimmerle
committed
Fix assorted minor memory management issues
1 parent b7698d6 commit 9c0ed61

File tree

3 files changed

+74
-10
lines changed

3 files changed

+74
-10
lines changed

src/engine/lua.cc

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ const char *Lua::blob_reader(lua_State *L, void *ud, size_t *size) {
122122
int Lua::run(Transaction *t) {
123123
#ifdef WITH_LUA
124124
std::string luaRet;
125+
const char *a = NULL;
126+
int ret = true;
125127
lua_State *L = luaL_newstate();
126128
luaL_openlibs(L);
127129

@@ -152,7 +154,8 @@ int Lua::run(Transaction *t) {
152154
}
153155
e.append(lua_tostring(L, -1));
154156
t->debug(2, e);
155-
return false;
157+
ret = false;
158+
goto err;
156159
}
157160

158161
if (lua_pcall(L, 0, 0, 0)) {
@@ -165,7 +168,8 @@ int Lua::run(Transaction *t) {
165168
e.append(luaerr);
166169
}
167170
t->debug(2, e);
168-
return false;
171+
ret = false;
172+
goto err;
169173
}
170174

171175
lua_setglobal(L, "modsec");
@@ -180,24 +184,27 @@ int Lua::run(Transaction *t) {
180184
e.append(luaerr);
181185
}
182186
t->debug(2, e);
183-
return false;
187+
ret = false;
188+
goto err;
184189
}
185190

186-
const char *a = reinterpret_cast<const char *>(lua_tostring(L, -1));
191+
a = reinterpret_cast<const char *>(lua_tostring(L, -1));
187192
if (a != NULL) {
188193
luaRet.assign(a);
189194
}
190195

191196
t->debug(9, "Returning from lua script: " + luaRet);
192197

193-
lua_pop(L, 1);
194-
lua_close(L);
195-
196198
if (luaRet.size() == 0) {
197-
return false;
199+
ret = false;
198200
}
199201

200-
return true;
202+
203+
err:
204+
lua_pop(L, 1);
205+
lua_close(L);
206+
207+
return ret;
201208
#else
202209
t->debug(9, "Lua support was not enabled.");
203210
return false;
@@ -287,6 +294,10 @@ int Lua::getvars(lua_State *L) {
287294
idx++;
288295
}
289296

297+
for (const collection::Variable * i : l) {
298+
delete i;
299+
}
300+
290301
return 1;
291302
}
292303

@@ -372,6 +383,7 @@ std::string Lua::applyTransformations(lua_State *L, Transaction *t,
372383
t->debug(1, "SecRuleScript: Invalid transformation function: " \
373384
+ std::string(name));
374385
}
386+
delete tfn;
375387
}
376388

377389
return newVar;
@@ -388,6 +400,7 @@ std::string Lua::applyTransformations(lua_State *L, Transaction *t,
388400
// FIXME: transformation is not yet returning null.
389401
if (tfn) {
390402
newVar = tfn->evaluate(newVar, t);
403+
delete tfn;
391404
} else {
392405
t->debug(1, "SecRuleScript: Invalid transformation function: " \
393406
+ std::string(name));

src/operators/fuzzy_hash.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ FuzzyHash::~FuzzyHash() {
9191
free(c->data);
9292
c->data = NULL;
9393
c = c->next;
94-
free (t);
94+
free(t);
9595
}
9696
m_head = NULL;
9797
}

test/valgrind_suppressions.txt

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3771,4 +3771,55 @@
37713771
fun:_Z17perform_unit_testPN16modsecurity_test15ModSecurityTestINS_14RegressionTestEEEPSt6vectorIPS1_SaIS5_EEPNS_22ModSecurityTestResultsINS_20RegressionTestResultEEEPi
37723772
fun:main
37733773
}
3774+
{
3775+
<insert_a_suppression_name_here>
3776+
Memcheck:Leak
3777+
match-leak-kinds: definite
3778+
fun:realloc
3779+
fun:write
3780+
fun:_ZN11modsecurity6engine3Lua11blob_keeperEP9lua_StatePKvmPv
3781+
obj:/usr/lib/liblua.so.5.3.4
3782+
obj:/usr/lib/liblua.so.5.3.4
3783+
obj:/usr/lib/liblua.so.5.3.4
3784+
obj:/usr/lib/liblua.so.5.3.4
3785+
fun:_ZN11modsecurity6engine3Lua4loadENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS7_
3786+
fun:_ZN11modsecurity10RuleScript4initEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
3787+
fun:_ZN2yy14seclang_parser5parseEv
3788+
fun:_ZN11modsecurity6Parser6Driver5parseERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_
3789+
fun:_ZN11modsecurity5Rules4loadEPKcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
3790+
fun:_Z17perform_unit_testPN16modsecurity_test15ModSecurityTestINS_14RegressionTestEEEPSt6vectorIPS1_SaIS5_EEPNS_22ModSecurityTestResultsINS_20RegressionTestResultEEEPi
3791+
fun:main
3792+
}
3793+
{
3794+
<insert_a_suppression_name_here>
3795+
Memcheck:Leak
3796+
match-leak-kinds: definite
3797+
fun:_Znwm
3798+
fun:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_assignERKS4_
3799+
fun:assign
3800+
fun:operator=
3801+
fun:_ZN11modsecurity6engine3Lua4loadENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS7_
3802+
fun:_ZN11modsecurity10RuleScript4initEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
3803+
fun:_ZN2yy14seclang_parser5parseEv
3804+
fun:_ZN11modsecurity6Parser6Driver5parseERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_
3805+
fun:_ZN11modsecurity5Rules4loadEPKcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
3806+
fun:_Z17perform_unit_testPN16modsecurity_test15ModSecurityTestINS_14RegressionTestEEEPSt6vectorIPS1_SaIS5_EEPNS_22ModSecurityTestResultsINS_20RegressionTestResultEEEPi
3807+
fun:main
3808+
}
3809+
{
3810+
<insert_a_suppression_name_here>
3811+
Memcheck:Leak
3812+
match-leak-kinds: definite
3813+
fun:_Znwm
3814+
fun:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tag.isra.137
3815+
fun:_M_construct_aux<char*>
3816+
fun:_M_construct<char*>
3817+
fun:basic_string
3818+
fun:RuleScript
3819+
fun:_ZN2yy14seclang_parser5parseEv
3820+
fun:_ZN11modsecurity6Parser6Driver5parseERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_
3821+
fun:_ZN11modsecurity5Rules4loadEPKcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
3822+
fun:_Z17perform_unit_testPN16modsecurity_test15ModSecurityTestINS_14RegressionTestEEEPSt6vectorIPS1_SaIS5_EEPNS_22ModSecurityTestResultsINS_20RegressionTestResultEEEPi
3823+
fun:main
3824+
}
37743825

0 commit comments

Comments
 (0)