diff options
-rw-r--r-- | camel/ChangeLog | 16 | ||||
-rw-r--r-- | camel/camel-mime-filter-canon.c | 7 | ||||
-rw-r--r-- | camel/camel-stream-filter.c | 22 |
3 files changed, 40 insertions, 5 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index d9ca59abe6..1e8bfcc94c 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,19 @@ +2003-02-27 Jeffrey Stedfast <fejj@ximian.com> + + * camel-stream-filter.c: Add a 'flushed' state variable to the + private struct. + (do_read): Set p->flushed to TRUE after we call + camel_mime_filter_complete() on all the filters. + (do_reset): Set p->flushed to FALSE. + (do_eos): Make sure the filters have been flushed before returning + that the stream is at EOS. + + * camel-mime-filter-canon.c (complete): Don't add a eol - + otherwise we will fail to verify some mutt signatures that do not + have a blank line before the boundary line (and note that the last + \n before the boundary really belongs to the boundary anyway) so + #if 0 this code out for now. + 2003-02-27 Not Zed <NotZed@Ximian.com> * camel-multipart-signed.c: Undo jeff's changes. diff --git a/camel/camel-mime-filter-canon.c b/camel/camel-mime-filter-canon.c index a72f01c77f..43337ae856 100644 --- a/camel/camel-mime-filter-canon.c +++ b/camel/camel-mime-filter-canon.c @@ -195,6 +195,12 @@ complete(CamelMimeFilter *f, char *in, size_t len, size_t prespace, char **out, while (o>starto && (o[-1] == ' ' || o[-1] == '\t' || o[-1]=='\r')) o--; } + +#if 0 + /* Note: #if 0'd out because we do not want to add a + * \r\n for PGP/MIME verification if it isn't there in + * the original content stream */ + /* check end of line canonicalisation */ if (o>starto) { if (flags & CAMEL_MIME_FILTER_CANON_CRLF) { @@ -208,6 +214,7 @@ complete(CamelMimeFilter *f, char *in, size_t len, size_t prespace, char **out, /* and always finish with an eol */ *o++ = '\n'; +#endif *outlen = o - *out; diff --git a/camel/camel-stream-filter.c b/camel/camel-stream-filter.c index febfb04e24..0e529c0071 100644 --- a/camel/camel-stream-filter.c +++ b/camel/camel-stream-filter.c @@ -19,11 +19,16 @@ * Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdio.h> #include <string.h> #include "camel-stream-filter.h" #define d(x) -/*#include <stdio.h>*/ /* use my malloc debugger? */ /*extern void g_check(void *mp);*/ @@ -45,7 +50,8 @@ struct _CamelStreamFilterPrivate { char *filtered; /* the filtered data */ size_t filteredlen; - int last_was_read; /* was the last op read or write? */ + int last_was_read:1; /* was the last op read or write? */ + int flushed:1 /* were the filters flushed? */ }; #define READ_PAD (128) /* bytes padded before buffer */ @@ -90,6 +96,7 @@ camel_stream_filter_init (CamelStreamFilter *obj) p->realbuffer = g_malloc(READ_SIZE + READ_PAD); p->buffer = p->realbuffer + READ_PAD; p->last_was_read = TRUE; + p->flushed = FALSE; } static void @@ -234,6 +241,7 @@ do_read (CamelStream *stream, char *buffer, size_t n) f = f->next; } size = p->filteredlen; + p->flushed = TRUE; } if (size <= 0) return size; @@ -368,10 +376,13 @@ do_eos (CamelStream *stream) { CamelStreamFilter *filter = (CamelStreamFilter *)stream; struct _CamelStreamFilterPrivate *p = _PRIVATE(filter); - + if (p->filteredlen > 0) return FALSE; - + + if (!p->flushed) + return FALSE; + return camel_stream_eos(filter->source); } @@ -383,7 +394,8 @@ do_reset (CamelStream *stream) struct _filter *f; p->filteredlen = 0; - + p->flushed = FALSE; + /* and reset filters */ f = p->filters; while (f) { |