#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[];
* @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
-/*-
- * 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,
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;
}
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;
}
}
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) {
}
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);
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;
}