Browse Source

[Minor] Rework to fix issues in Lua API

Found by: coverity scan
tags/3.1
Vsevolod Stakhov 2 years ago
parent
commit
b36eaf826c
5 changed files with 60 additions and 26 deletions
  1. 8
    0
      src/lua/lua_common.h
  2. 19
    1
      src/lua/lua_cryptobox.c
  3. 2
    2
      src/lua/lua_mimepart.c
  4. 29
    21
      src/lua/lua_spf.c
  5. 2
    2
      src/lua/lua_task.c

+ 8
- 0
src/lua/lua_common.h View File

@@ -527,6 +527,14 @@ gsize lua_logger_out_type (lua_State *L, gint pos, gchar *outbuf,
*/
void *rspamd_lua_check_udata (lua_State *L, gint pos, const gchar *classname);

#define RSPAMD_LUA_CHECK_UDATA_PTR_OR_RETURN(L, pos, classname, type, dest) do { \
type **_maybe_ptr = (type **)rspamd_lua_check_udata((L), (pos), (classname)); \
if (_maybe_ptr == NULL) { \
return luaL_error (L, "%s: invalid arguments; pos = %d; expected = %s", G_STRFUNC, (pos), (classname)); \
} \
(dest) = *(_maybe_ptr); \
} while(0)

/**
* Safely checks userdata to match specified class
* @param L

+ 19
- 1
src/lua/lua_cryptobox.c View File

@@ -2019,6 +2019,10 @@ lua_cryptobox_encrypt_memory (lua_State *L)
gint ret = luaL_error (L, "cannot encrypt data: %s", err->message);
g_error_free (err);

if (owned_pk) {
rspamd_pubkey_unref (pk);
}

return ret;
}
}
@@ -2027,6 +2031,10 @@ lua_cryptobox_encrypt_memory (lua_State *L)
gint ret = luaL_error (L, "cannot encrypt data: %s", err->message);
g_error_free (err);

if (owned_pk) {
rspamd_pubkey_unref (pk);
}

return ret;
}
}
@@ -2065,7 +2073,7 @@ lua_cryptobox_encrypt_file (lua_State *L)
struct rspamd_cryptobox_keypair *kp = NULL;
struct rspamd_cryptobox_pubkey *pk = NULL;
const gchar *filename;
gchar *data;
gchar *data = NULL;
guchar *out = NULL;
struct rspamd_lua_text *res;
gsize len = 0, outlen = 0;
@@ -2104,6 +2112,9 @@ lua_cryptobox_encrypt_file (lua_State *L)
err->message);
g_error_free (err);
munmap (data, len);
if (own_pk) {
rspamd_pubkey_unref (pk);
}

return ret;
}
@@ -2115,6 +2126,10 @@ lua_cryptobox_encrypt_file (lua_State *L)
g_error_free (err);
munmap (data, len);

if (own_pk) {
rspamd_pubkey_unref (pk);
}

return ret;
}
}
@@ -2132,6 +2147,9 @@ lua_cryptobox_encrypt_file (lua_State *L)
return 1;

err:
if (data) {
munmap (data, len);
}
if (own_pk) {
rspamd_pubkey_unref (pk);
}

+ 2
- 2
src/lua/lua_mimepart.c View File

@@ -2031,8 +2031,8 @@ lua_mimepart_headers_foreach (lua_State *L)
lua_gettable (L, 3);

if (lua_isuserdata (L, -1)) {
re = *(struct rspamd_lua_regexp **)
rspamd_lua_check_udata (L, -1, "rspamd{regexp}");
RSPAMD_LUA_CHECK_UDATA_PTR_OR_RETURN(L, -1, "rspamd{regexp}",
struct rspamd_lua_regexp, re);
}

lua_pop (L, 1);

+ 29
- 21
src/lua/lua_spf.c View File

@@ -258,9 +258,11 @@ lua_spf_resolve (lua_State * L)
static gint
lua_spf_record_dtor (lua_State *L)
{
struct spf_resolved *record =
* (struct spf_resolved **)rspamd_lua_check_udata (L, 1,
SPF_RECORD_CLASS);
struct spf_resolved *record;

RSPAMD_LUA_CHECK_UDATA_PTR_OR_RETURN(L, 1, SPF_RECORD_CLASS,
struct spf_resolved,
record);

if (record) {
spf_record_unref (record);
@@ -398,9 +400,10 @@ spf_check_element (lua_State *L, struct spf_resolved *rec, struct spf_addr *addr
static gint
lua_spf_record_check_ip (lua_State *L)
{
struct spf_resolved *record =
* (struct spf_resolved **)rspamd_lua_check_udata (L, 1,
SPF_RECORD_CLASS);
struct spf_resolved *record;
RSPAMD_LUA_CHECK_UDATA_PTR_OR_RETURN(L, 1, SPF_RECORD_CLASS,
struct spf_resolved,
record);
struct rspamd_lua_ip *ip = NULL;
gint nres = 0;
gboolean need_free_ip = FALSE;
@@ -474,9 +477,10 @@ lua_spf_record_check_ip (lua_State *L)
static gint
lua_spf_record_get_domain (lua_State *L)
{
struct spf_resolved *record =
*(struct spf_resolved **) rspamd_lua_check_udata (L, 1,
SPF_RECORD_CLASS);
struct spf_resolved *record;
RSPAMD_LUA_CHECK_UDATA_PTR_OR_RETURN(L, 1, SPF_RECORD_CLASS,
struct spf_resolved,
record);

if (record) {
lua_pushstring (L, record->domain);
@@ -495,9 +499,10 @@ lua_spf_record_get_domain (lua_State *L)
static gint
lua_spf_record_get_ttl (lua_State *L)
{
struct spf_resolved *record =
*(struct spf_resolved **) rspamd_lua_check_udata (L, 1,
SPF_RECORD_CLASS);
struct spf_resolved *record;
RSPAMD_LUA_CHECK_UDATA_PTR_OR_RETURN(L, 1, SPF_RECORD_CLASS,
struct spf_resolved,
record);

if (record) {
lua_pushinteger (L, record->ttl);
@@ -516,9 +521,10 @@ lua_spf_record_get_ttl (lua_State *L)
static gint
lua_spf_record_get_timestamp (lua_State *L)
{
struct spf_resolved *record =
*(struct spf_resolved **) rspamd_lua_check_udata (L, 1,
SPF_RECORD_CLASS);
struct spf_resolved *record;
RSPAMD_LUA_CHECK_UDATA_PTR_OR_RETURN(L, 1, SPF_RECORD_CLASS,
struct spf_resolved,
record);

if (record) {
lua_pushnumber (L, record->timestamp);
@@ -537,9 +543,10 @@ lua_spf_record_get_timestamp (lua_State *L)
static gint
lua_spf_record_get_digest (lua_State *L)
{
struct spf_resolved *record =
*(struct spf_resolved **) rspamd_lua_check_udata (L, 1,
SPF_RECORD_CLASS);
struct spf_resolved *record;
RSPAMD_LUA_CHECK_UDATA_PTR_OR_RETURN(L, 1, SPF_RECORD_CLASS,
struct spf_resolved,
record);

if (record) {
gchar hexbuf[64];
@@ -567,9 +574,10 @@ lua_spf_record_get_digest (lua_State *L)
static gint
lua_spf_record_get_elts (lua_State *L)
{
struct spf_resolved *record =
*(struct spf_resolved **) rspamd_lua_check_udata (L, 1,
SPF_RECORD_CLASS);
struct spf_resolved *record;
RSPAMD_LUA_CHECK_UDATA_PTR_OR_RETURN(L, 1, SPF_RECORD_CLASS,
struct spf_resolved,
record);

if (record) {
guint i;

+ 2
- 2
src/lua/lua_task.c View File

@@ -6679,8 +6679,8 @@ lua_task_headers_foreach (lua_State *L)
lua_gettable (L, 3);

if (lua_isuserdata (L, -1)) {
re = *(struct rspamd_lua_regexp **)
rspamd_lua_check_udata (L, -1, "rspamd{regexp}");
RSPAMD_LUA_CHECK_UDATA_PTR_OR_RETURN(L, -1, "rspamd{regexp}",
struct rspamd_lua_regexp, re);
}

lua_pop (L, 1);

Loading…
Cancel
Save