diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-02-10 23:07:13 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-02-10 23:07:13 +0000 |
commit | be13d1b8e409ebd64de46e5ca1b6a5c886932e38 (patch) | |
tree | 5f9f4d6eddcc1d02b516235c2172dad7c908fe0f /src/libstat/backends | |
parent | ccb5d1f7b205821fae2924dd1b2bda91add277d1 (diff) | |
download | rspamd-be13d1b8e409ebd64de46e5ca1b6a5c886932e38.tar.gz rspamd-be13d1b8e409ebd64de46e5ca1b6a5c886932e38.zip |
Fix more issues found by coverity
Diffstat (limited to 'src/libstat/backends')
-rw-r--r-- | src/libstat/backends/mmaped_file.c | 18 | ||||
-rw-r--r-- | src/libstat/backends/redis_backend.c | 12 |
2 files changed, 23 insertions, 7 deletions
diff --git a/src/libstat/backends/mmaped_file.c b/src/libstat/backends/mmaped_file.c index 594f07d8b..d5b466a9a 100644 --- a/src/libstat/backends/mmaped_file.c +++ b/src/libstat/backends/mmaped_file.c @@ -346,12 +346,14 @@ rspamd_mmaped_file_check (rspamd_mempool_t *pool, rspamd_mmaped_file_t * file) } f = (struct stat_file *)file->map; - c = f->header.magic; + c = &f->header.magic[0]; /* Check magic and version */ if (*c++ != 'r' || *c++ != 's' || *c++ != 'd') { msg_info_pool ("file %s is invalid stat file", file->filename); return -1; } + + c = &f->header.version[0]; /* Now check version and convert old version to new one (that can be used for sync */ if (*c == 1 && *(c + 1) == 0) { return -1; @@ -414,6 +416,7 @@ rspamd_mmaped_file_reindex (rspamd_mempool_t *pool, lock_fd = open (lock, O_RDONLY, 00600); if (lock_fd != -1) { if (!rspamd_file_lock (lock_fd, FALSE)) { + close (lock_fd); g_free (lock); return rspamd_mmaped_file_open (pool, filename, size, stcf); @@ -608,8 +611,19 @@ rspamd_mmaped_file_open (rspamd_mempool_t *pool, /* Try to lock pages in RAM */ /* Acquire lock for this operation */ - rspamd_file_lock (new_file->fd, FALSE); + if (!rspamd_file_lock (new_file->fd, FALSE)) { + close (new_file->fd); + munmap (new_file->map, st.st_size); + msg_info_pool ("cannot lock file %s, error %d, %s", + filename, + errno, + strerror (errno)); + g_slice_free1 (sizeof (*new_file), new_file); + return NULL; + } + if (rspamd_mmaped_file_check (pool, new_file) == -1) { + close (new_file->fd); rspamd_file_unlock (new_file->fd, FALSE); munmap (new_file->map, st.st_size); g_slice_free1 (sizeof (*new_file), new_file); diff --git a/src/libstat/backends/redis_backend.c b/src/libstat/backends/redis_backend.c index 8fde4bfb4..406b76ab5 100644 --- a/src/libstat/backends/redis_backend.c +++ b/src/libstat/backends/redis_backend.c @@ -111,22 +111,24 @@ rspamd_redis_expand_object (const gchar *pattern, mod_char } state = just_char; struct rspamd_statfile_config *stcf; - lua_State *L; + lua_State *L = NULL; struct rspamd_task **ptask; GString *tb; const gchar *rcpt = NULL; gint err_idx; - g_assert (ctx != NULL); stcf = ctx->stcf; - L = task->cfg->lua_state; + + if (task) { + L = task->cfg->lua_state; + } if (ctx->enable_users) { if (ctx->cbref_user == -1) { rcpt = rspamd_task_get_principal_recipient (task); } - else { + else if (L) { /* Execute lua function to get userdata */ lua_pushcfunction (L, &rspamd_lua_traceback); err_idx = lua_gettop (L); @@ -357,7 +359,7 @@ rspamd_redis_tokens_to_query (struct rspamd_task *task, GPtrArray *tokens, "%s\r\n" "$%d\r\n" "%s\r\n", - learn ? (tokens->len * 2 + 2) : (tokens->len + 2), + (tokens->len + 2), larg0, arg0, larg1, arg1); } |