]> source.dussan.org Git - rspamd.git/commitdiff
Use caseless hash and equal functions for request headers.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 20 May 2015 16:34:15 +0000 (17:34 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 20 May 2015 16:34:15 +0000 (17:34 +0100)
src/libserver/task.c
src/libutil/util.c
src/libutil/util.h

index 26de6a69fbc9d94c948adc64563a48694201596d..1874847de7ad8ae98ab099aaea39908aa4ab3395 100644 (file)
@@ -71,13 +71,13 @@ rspamd_task_new (struct rspamd_worker *worker)
                new_task->re_cache);
        new_task->raw_headers = g_hash_table_new (rspamd_strcase_hash,
                        rspamd_strcase_equal);
-       new_task->request_headers = g_hash_table_new_full ((GHashFunc)g_string_hash,
-               (GEqualFunc)g_string_equal, gstring_destruct, gstring_destruct);
+       new_task->request_headers = g_hash_table_new_full (rspamd_gstring_icase_hash,
+               rspamd_gstring_icase_equal, gstring_destruct, gstring_destruct);
        rspamd_mempool_add_destructor (new_task->task_pool,
                (rspamd_mempool_destruct_t) g_hash_table_unref,
                new_task->request_headers);
-       new_task->reply_headers = g_hash_table_new_full ((GHashFunc)g_string_hash,
-               (GEqualFunc)g_string_equal, gstring_destruct, gstring_destruct);
+       new_task->reply_headers = g_hash_table_new_full (rspamd_gstring_icase_hash,
+                       rspamd_gstring_icase_equal, gstring_destruct, gstring_destruct);
        rspamd_mempool_add_destructor (new_task->task_pool,
                (rspamd_mempool_destruct_t) g_hash_table_unref,
                new_task->reply_headers);
index 90352f28ecf875848e289a63d4974718a9a50ecc..5e3e9c4e18724eb6f446a36782bdc7ab4d1dba97 100644 (file)
@@ -1316,6 +1316,27 @@ rspamd_fstring_icase_hash (gconstpointer key)
        return rspamd_icase_hash (f->begin, f->len);
 }
 
+gboolean
+rspamd_gstring_icase_equal (gconstpointer v, gconstpointer v2)
+{
+       const GString *f1 = v, *f2 = v2;
+       if (f1->len == f2->len &&
+               g_ascii_strncasecmp (f1->str, f2->str, f1->len) == 0) {
+               return TRUE;
+       }
+
+       return FALSE;
+}
+
+
+guint
+rspamd_gstring_icase_hash (gconstpointer key)
+{
+       const GString *f = key;
+
+       return rspamd_icase_hash (f->str, f->len);
+}
+
 void
 gperf_profiler_init (struct rspamd_config *cfg, const gchar *descr)
 {
index c4170881cad53cf6ecdfb3e28cd41b18de884c73..80896083cd468b5e183f580058b5cb1774780be5 100644 (file)
@@ -185,6 +185,8 @@ gboolean rspamd_str_equal (gconstpointer v, gconstpointer v2);
  */
 guint rspamd_fstring_icase_hash (gconstpointer key);
 gboolean rspamd_fstring_icase_equal (gconstpointer v, gconstpointer v2);
+guint rspamd_gstring_icase_hash (gconstpointer key);
+gboolean rspamd_gstring_icase_equal (gconstpointer v, gconstpointer v2);
 
 /*
  * Google perf-tools initialization function