]> source.dussan.org Git - rspamd.git/commitdiff
One more try to fix dkim border issues.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 19 Nov 2014 15:06:51 +0000 (15:06 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 19 Nov 2014 15:06:51 +0000 (15:06 +0000)
src/libserver/dkim.c

index b8b92700b791610294877843e3bbad795f73ea6d..060620672ddc92fd96c1d771da046d2c3ed4a3ca 100644 (file)
@@ -1027,11 +1027,8 @@ rspamd_dkim_relaxed_body_step (GChecksum *ck, const gchar **start, guint size,
        guint len, inlen, added = 0;
        gboolean got_sp, finished = FALSE;
 
-       if (size > sizeof (buf)) {
-               len = sizeof (buf);
-       }
-       else {
-               len = size;
+       len = size;
+       if (size <= sizeof (buf)) {
                finished = TRUE;
        }
        inlen = sizeof (buf) - 1;
@@ -1046,6 +1043,15 @@ rspamd_dkim_relaxed_body_step (GChecksum *ck, const gchar **start, guint size,
                                got_sp = FALSE;
                                t--;
                        }
+                       if (inlen < 2) {
+                               /*
+                                * Inlen is too small to continue, hence we need more iteration to
+                                * avoid splitted \r\n
+                                */
+                               h --;
+                               finished = FALSE;
+                               break;
+                       }
                        /* Replace a single \n or \r with \r\n */
                        if (*h == '\n' && (h == *start || *(h - 1) != '\r')) {
                                *t++ = '\r';
@@ -1069,14 +1075,6 @@ rspamd_dkim_relaxed_body_step (GChecksum *ck, const gchar **start, guint size,
                                len--;
                                continue;
                        }
-                       else if (inlen < 2) {
-                               /*
-                                * Inlen is too small to continue, hence we need more iteration to
-                                * avoid splitted \r\n
-                                */
-                               finished = FALSE;
-                               break;
-                       }
                }
                else if (g_ascii_isspace (*h)) {
                        if (got_sp) {
@@ -1136,11 +1134,8 @@ rspamd_dkim_simple_body_step (GChecksum *ck, const gchar **start, guint size,
        guint len, inlen, added = 0;
        gboolean finished = FALSE;
 
-       if (size > sizeof (buf)) {
-               len = sizeof (buf);
-       }
-       else {
-               len = size;
+       len = size;
+       if (size <= sizeof (buf)) {
                finished = TRUE;
        }
        inlen = sizeof (buf) - 1;
@@ -1149,6 +1144,15 @@ rspamd_dkim_simple_body_step (GChecksum *ck, const gchar **start, guint size,
 
        while (len && inlen) {
                if (*h == '\r' || *h == '\n') {
+                       if (inlen < 2) {
+                               /*
+                                * Inlen is too small to continue, hence we need more iteration to
+                                * avoid splitted \r\n
+                                */
+                               h --;
+                               finished = FALSE;
+                               break;
+                       }
                        /* Replace a single \n or \r with \r\n */
                        if (*h == '\n' && (h == *start || *(h - 1) != '\r')) {
                                *t++ = '\r';
@@ -1169,14 +1173,6 @@ rspamd_dkim_simple_body_step (GChecksum *ck, const gchar **start, guint size,
                                len--;
                                continue;
                        }
-                       else if (inlen < 2) {
-                               /*
-                                * Inlen is too small to continue, hence we need more iteration to
-                                * avoid splitted \r\n
-                                */
-                               finished = FALSE;
-                               break;
-                       }
                }
                *t++ = *h++;
                inlen--;