]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
* Fix error with writing symbols cache file
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Wed, 28 Jul 2010 17:27:00 +0000 (21:27 +0400)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Wed, 28 Jul 2010 17:27:00 +0000 (21:27 +0400)
* Fix error while working in utf mode when raw regexps was not created properly

src/controller.c
src/expressions.c
src/symbols_cache.c

index dd6f55fff756b225df5fbf05dff3541a6cf62096..b320eeb9b7c8bbb6862c0d77769f7e002614f922 100644 (file)
@@ -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;
        }
index 224b650323fc5a6ea48c8557604fde5628a58a61..0d61f9ca2600778f62f2279862acd321c5f0604a 100644 (file)
@@ -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);
index ee931458e8e6aa7db413934bfb928eed3986af1c..d615ba74b4faa2e6282c5c662d1c876c73a0ac69 100644 (file)
@@ -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);