diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2010-07-28 21:27:00 +0400 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2010-07-28 21:27:00 +0400 |
commit | 922b62c8c3c59a287729726234b1b507da333a33 (patch) | |
tree | 5035ab823420a825e92b85a409860e58e1e04c77 | |
parent | 1b106b62bc140af89e14cb91b10f7978a47932fc (diff) | |
download | rspamd-922b62c8c3c59a287729726234b1b507da333a33.tar.gz rspamd-922b62c8c3c59a287729726234b1b507da333a33.zip |
* Fix error with writing symbols cache file
* Fix error while working in utf mode when raw regexps was not created properly
-rw-r--r-- | src/controller.c | 4 | ||||
-rw-r--r-- | src/expressions.c | 16 | ||||
-rw-r--r-- | src/symbols_cache.c | 10 |
3 files changed, 15 insertions, 15 deletions
diff --git a/src/controller.c b/src/controller.c index dd6f55fff..b320eeb9b 100644 --- a/src/controller.c +++ b/src/controller.c @@ -182,7 +182,7 @@ counter_write_callback (gpointer key, gpointer value, void *data) char out_buf[128]; int r; - r = rspamd_snprintf (out_buf, sizeof (out_buf), "%s: %llu" CRLF, name, (unsigned long long int)cd->value); + r = rspamd_snprintf (out_buf, sizeof (out_buf), "%s: %ul" CRLF, name, (unsigned long int)cd->value); if (! rspamd_dispatcher_write (session->dispatcher, out_buf, r, TRUE, FALSE)) { msg_warn ("cannot write to socket"); } @@ -229,7 +229,7 @@ write_whole_statfile (struct controller_session *session, char *symbol, struct c } } - i = rspamd_snprintf (out_buf, sizeof (out_buf), "%udL %udL %udL" CRLF, rev, ti, pos); + i = rspamd_snprintf (out_buf, sizeof (out_buf), "%uL %uL %uL" CRLF, rev, ti, pos); if (! rspamd_dispatcher_write (session->dispatcher, out_buf, i, TRUE, FALSE)) { return FALSE; } diff --git a/src/expressions.c b/src/expressions.c index 224b65032..0d61f9ca2 100644 --- a/src/expressions.c +++ b/src/expressions.c @@ -705,6 +705,13 @@ parse_regexp (memory_pool_t * pool, char *line, gboolean raw_mode) } } result->regexp = g_regex_new (begin, regexp_flags, 0, &err); + if ((regexp_flags & G_REGEX_RAW) != 0) { + result->raw_regexp = result->regexp; + } + else { + result->raw_regexp = g_regex_new (begin, regexp_flags | G_REGEX_RAW, 0, &err); + memory_pool_add_destructor (pool, (pool_destruct_func) g_regex_unref, (void *)result->raw_regexp); + } *end = '/'; result->regexp_text = memory_pool_strdup (pool, start); memory_pool_add_destructor (pool, (pool_destruct_func) g_regex_unref, (void *)result->regexp); @@ -714,14 +721,7 @@ parse_regexp (memory_pool_t * pool, char *line, gboolean raw_mode) msg_warn ("could not read regexp: %s while reading regexp %s", err->message, src); return NULL; } - if ((regexp_flags & G_REGEX_RAW) != 0) { - result->raw_regexp = result->regexp; - } - else { - result->raw_regexp = g_regex_new (begin, regexp_flags | G_REGEX_RAW, 0, &err); - memory_pool_add_destructor (pool, (pool_destruct_func) g_regex_unref, (void *)result->raw_regexp); - } - *end = '/'; + if (result->raw_regexp == NULL || err != NULL) { msg_warn ("could not read raw regexp: %s while reading regexp %s", err->message, src); diff --git a/src/symbols_cache.c b/src/symbols_cache.c index ee931458e..d615ba74b 100644 --- a/src/symbols_cache.c +++ b/src/symbols_cache.c @@ -139,7 +139,7 @@ unmap_cache_file (gpointer arg) static gboolean mmap_cache_file (struct symbols_cache *cache, int fd, memory_pool_t *pool) { - void *map; + guint8 *map; int i; GList *cur; struct cache_item *item; @@ -158,14 +158,14 @@ mmap_cache_file (struct symbols_cache *cache, int fd, memory_pool_t *pool) cur = g_list_first (cache->negative_items); while (cur) { item = cur->data; - item->s = ((struct saved_cache_item *)map) + i; + item->s = (struct saved_cache_item *)(map + i * sizeof (struct saved_cache_item)); cur = g_list_next (cur); i ++; } cur = g_list_first (cache->static_items); while (cur) { item = cur->data; - item->s = ((struct saved_cache_item *)map) + i; + item->s = (struct saved_cache_item *)(map + i * sizeof (struct saved_cache_item)); cur = g_list_next (cur); i ++; } @@ -201,7 +201,7 @@ create_cache_file (struct symbols_cache *cache, const char *filename, int fd, me cur = g_list_first (cache->negative_items); while (cur) { item = cur->data; - if (write (fd, &item->s, sizeof (struct saved_cache_item)) == -1) { + if (write (fd, item->s, sizeof (struct saved_cache_item)) == -1) { msg_err ("cannot write to file %d, %s", errno, strerror (errno)); close (fd); g_checksum_free (cksum); @@ -213,7 +213,7 @@ create_cache_file (struct symbols_cache *cache, const char *filename, int fd, me cur = g_list_first (cache->static_items); while (cur) { item = cur->data; - if (write (fd, &item->s, sizeof (struct saved_cache_item)) == -1) { + if (write (fd, item->s, sizeof (struct saved_cache_item)) == -1) { msg_err ("cannot write to file %d, %s", errno, strerror (errno)); close (fd); g_checksum_free (cksum); |