]> source.dussan.org Git - rspamd.git/commitdiff
* Strip header values to avoid problems with libc functions
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Fri, 8 May 2009 15:04:41 +0000 (19:04 +0400)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Fri, 8 May 2009 15:04:41 +0000 (19:04 +0400)
src/fstring.c
src/fstring.h
src/protocol.c

index 2202effafffc86b29cd83afd8c9f01827ae73574..935c8bdcc9b67c99a95c4e9e31a7c89b9b12d941 100644 (file)
@@ -338,3 +338,39 @@ fstrhash (f_str_t *str)
        }
        return hval;
 }
+
+void
+fstrstrip (f_str_t *str)
+{
+       char *p = str->begin;
+       int r = 0;
+
+       while (r < str->len) {
+               if (g_ascii_isspace (*p)) {
+                       p ++;
+                       r ++;
+               }
+               else {
+                       break;
+               }
+       }
+       
+       if (r > 0) {
+               memmove (str->begin, p, str->len - r);
+               str->len -= r;
+       }
+
+       r = str->len;
+       p = str->begin + str->len;
+       while (r > 0) {
+               if (g_ascii_isspace (*p)) {
+                       p --;
+                       r --;
+               }
+               else {
+                       break;
+               }
+       }
+
+       str->len = r;
+}
index f5d7fffa3e368b9fc3d7e252f46e0c9034aaf66c..00fac9039efdac447ab4f2a66c61400edcc2a1ae 100644 (file)
@@ -98,4 +98,9 @@ uint32_t fstrhash (f_str_t *str);
  */
 char* fstrcstr (f_str_t *str, memory_pool_t *pool);
 
+/*
+ * Strip fstr string from space symbols
+ */
+void fstrstrip (f_str_t *str);
+
 #endif
index a330334f83f44a4b87bac7ee70a691857128d1c6..49a86661b0fbca0bc0b968397410ab99130d8e6d 100644 (file)
@@ -100,6 +100,7 @@ separate_command (f_str_t *in, char c)
                if (*p == c) {
                        *p = '\0';
                        in->begin = p + 1;
+                       in->len -= r + 1;
                        return b;
                }
                p ++;
@@ -225,6 +226,7 @@ parse_header (struct worker_task *task, f_str_t *line)
        }
        /* Eat whitespaces */
        g_strstrip (headern);
+       fstrstrip (line);
 
        switch (headern[0]) {
                case 'c':