aboutsummaryrefslogtreecommitdiffstats
path: root/src/lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua')
-rw-r--r--src/lua/lua_common.h5
-rw-r--r--src/lua/lua_compress.c12
-rw-r--r--src/lua/lua_text.c4
-rw-r--r--src/lua/lua_util.c11
4 files changed, 20 insertions, 12 deletions
diff --git a/src/lua/lua_common.h b/src/lua/lua_common.h
index 198735c66..1d39d0c52 100644
--- a/src/lua/lua_common.h
+++ b/src/lua/lua_common.h
@@ -94,8 +94,7 @@ static inline int lua_absindex(lua_State *L, int i)
#define LUA_PUBLIC_FUNCTION_DEF(class, name) int lua_##class##_##name(lua_State *L)
#define LUA_INTERFACE_DEF(class, name) \
{ \
- #name, lua_##class##_##name \
- }
+ #name, lua_##class##_##name}
extern const luaL_reg null_reg[];
@@ -281,7 +280,7 @@ struct rspamd_lua_text *lua_check_text_or_string(lua_State *L, int pos);
* @return
*/
struct rspamd_lua_text *lua_new_text(lua_State *L, const char *start,
- gsize len, gboolean own);
+ gsize len, gboolean allocate_memory);
/**
* Create new text object from task pool if allocation is needed
* @param task
diff --git a/src/lua/lua_compress.c b/src/lua/lua_compress.c
index 4a348404c..c82394ed6 100644
--- a/src/lua/lua_compress.c
+++ b/src/lua/lua_compress.c
@@ -1,11 +1,11 @@
-/*-
- * Copyright 2021 Vsevolod Stakhov
+/*
+ * Copyright 2024 Vsevolod Stakhov
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -504,7 +504,8 @@ lua_zstd_compress_stream(lua_State *L)
return lua_zstd_push_error(L, err);
}
- lua_new_text(L, onb.dst, onb.pos, TRUE);
+ t = lua_new_text(L, onb.dst, onb.pos, FALSE);
+ t->flags |= RSPAMD_TEXT_FLAG_OWN;
return 1;
}
@@ -598,7 +599,8 @@ lua_zstd_decompress_stream(lua_State *L)
return lua_zstd_push_error(L, err);
}
- lua_new_text(L, onb.dst, onb.pos, TRUE);
+ t = lua_new_text(L, onb.dst, onb.pos, FALSE);
+ t->flags |= RSPAMD_TEXT_FLAG_OWN;
return 1;
}
diff --git a/src/lua/lua_text.c b/src/lua/lua_text.c
index 4478314f1..3342fc95c 100644
--- a/src/lua/lua_text.c
+++ b/src/lua/lua_text.c
@@ -312,14 +312,14 @@ lua_check_text_or_string(lua_State *L, int pos)
}
struct rspamd_lua_text *
-lua_new_text(lua_State *L, const char *start, gsize len, gboolean own)
+lua_new_text(lua_State *L, const char *start, gsize len, gboolean allocate_memory)
{
struct rspamd_lua_text *t;
t = lua_newuserdata(L, sizeof(*t));
t->flags = 0;
- if (own) {
+ if (allocate_memory) {
char *storage;
if (len > 0) {
diff --git a/src/lua/lua_util.c b/src/lua/lua_util.c
index 92f831f6f..251d1e1e7 100644
--- a/src/lua/lua_util.c
+++ b/src/lua/lua_util.c
@@ -1025,7 +1025,12 @@ lua_util_encode_base64(lua_State *L)
}
if (out != NULL) {
- lua_new_text(L, out, outlen, TRUE);
+ /*
+ * Manually set OWN flag, as `lua_new_text` will allocate another chunk of memory,
+ * and we will have memory leak of the memory allocated by `rspamd_encode_base64_fold`
+ */
+ t = lua_new_text(L, out, outlen, FALSE);
+ t->flags = RSPAMD_TEXT_FLAG_OWN;
}
else {
lua_pushnil(L);
@@ -1650,7 +1655,9 @@ lua_util_transliterate(lua_State *L)
gsize outlen;
char *transliterated = rspamd_utf8_transliterate(t->start, t->len, &outlen);
- lua_new_text(L, transliterated, outlen, TRUE);
+
+ t = lua_new_text(L, transliterated, outlen, FALSE);
+ t->flags = RSPAMD_TEXT_FLAG_OWN;
return 1;
}