aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2010-07-28 21:27:00 +0400
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2010-07-28 21:27:00 +0400
commit922b62c8c3c59a287729726234b1b507da333a33 (patch)
tree5035ab823420a825e92b85a409860e58e1e04c77
parent1b106b62bc140af89e14cb91b10f7978a47932fc (diff)
downloadrspamd-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.c4
-rw-r--r--src/expressions.c16
-rw-r--r--src/symbols_cache.c10
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);