diff options
Diffstat (limited to 'camel')
-rw-r--r-- | camel/ChangeLog | 8 | ||||
-rw-r--r-- | camel/camel-mime-filter-smtp.c | 62 | ||||
-rw-r--r-- | camel/camel-mime-utils.c | 6 |
3 files changed, 41 insertions, 35 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index a3b614049f..92bd478802 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,11 @@ +2000-06-02 Not Zed <NotZed@HelixCode.com> + + * camel-mime-utils.c (base64_encode_step): Ick, damn signs! Fix a + bug with sign extended bytes. + + * camel-mime-filter-smtp.c (filter): Changed layout/logic slightly + (to match From filter) + 2000-06-02 Jeffrey Stedfast <fejj@helixcode.com> * camel-mime-filter-smtp.c (filter): Fixed the filter so that it wouldn't diff --git a/camel/camel-mime-filter-smtp.c b/camel/camel-mime-filter-smtp.c index 2b769fde72..f02a951306 100644 --- a/camel/camel-mime-filter-smtp.c +++ b/camel/camel-mime-filter-smtp.c @@ -119,32 +119,33 @@ filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, s } left = inend - inptr; - if (left < 2) { - if (*inptr == '.') { - camel_mime_filter_backup (mf, inptr, left); - midline = FALSE; - inend = inptr; - break; - } - } else { - /* we only need to escape dots if they start the line */ - if (left > 0 && *inptr == '.' && *(inptr+1) != '.') { - midline = TRUE; - dotcount++; - node = alloca (sizeof (*node)); - node->type = DOT_NODE; - node->pointer = inptr; - node->next = NULL; - tail->next = node; - tail = node; - inptr++; + if (left > 0) { + midline = TRUE; + if (left < 2) { + if (*inptr == '.') { + camel_mime_filter_backup (mf, inptr, left); + midline = FALSE; + inend = inptr; + break; + } } else { - midline = TRUE; + /* we only need to escape dots if they start the line */ + if (*inptr == '.' && *(inptr+1) != '.') { + midline = TRUE; + dotcount++; + node = alloca (sizeof (*node)); + node->type = DOT_NODE; + node->pointer = inptr; + node->next = NULL; + tail->next = node; + tail = node; + inptr++; + } } + } else { + /* \n is at end of line, check next buffer */ + midline = FALSE; } - } else { - /* \n is at end of line, check next buffer */ - midline = FALSE; } } @@ -156,16 +157,13 @@ filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, s inptr = in; outptr = mf->outbuf; while (node) { + g_assert(node->pointer >= inptr); + memcpy (outptr, inptr, node->pointer - inptr); + outptr += node->pointer - inptr; if (node->type == EOLN_NODE) { - memcpy (outptr, inptr, node->pointer - inptr); - outptr += node->pointer - inptr; *outptr++ = '\r'; - } else { - if (node->type == DOT_NODE) { - memcpy (outptr, inptr, node->pointer - inptr); - outptr += node->pointer - inptr; - *outptr++ = '.'; - } + } else if (node->type == DOT_NODE) { + *outptr++ = '.'; } inptr = node->pointer; node = node->next; @@ -176,7 +174,7 @@ filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, s *outlen = outptr - mf->outbuf; *outprespace = mf->outbuf - mf->outreal; - d(printf ("Filtered '%.*s'\n", *outlen, *out)); + d(printf ("Filtered [%d] '%.*s'\n", *outlen, *outlen, *out)); } else { *out = in; *outlen = inend - in; diff --git a/camel/camel-mime-utils.c b/camel/camel-mime-utils.c index c893c10050..ae4b0820b8 100644 --- a/camel/camel-mime-utils.c +++ b/camel/camel-mime-utils.c @@ -298,9 +298,9 @@ base64_encode_step(unsigned char *in, int len, unsigned char *out, int *state, i already = *state; switch (((char *)save)[0]) { - case 1: c1 = ((char *)save)[1]; goto skip1; - case 2: c1 = ((char *)save)[1]; - c2 = ((char *)save)[2]; goto skip2; + case 1: c1 = ((unsigned char *)save)[1]; goto skip1; + case 2: c1 = ((unsigned char *)save)[1]; + c2 = ((unsigned char *)save)[2]; goto skip2; } /* yes, we jump into the loop, no i'm not going to change it, its beautiful! */ |