aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-mime-filter-basic.c
diff options
context:
space:
mode:
Diffstat (limited to 'camel/camel-mime-filter-basic.c')
-rw-r--r--camel/camel-mime-filter-basic.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/camel/camel-mime-filter-basic.c b/camel/camel-mime-filter-basic.c
index 8dd94e1580..17e667c5ae 100644
--- a/camel/camel-mime-filter-basic.c
+++ b/camel/camel-mime-filter-basic.c
@@ -98,23 +98,27 @@ complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out,
switch(f->type) {
case CAMEL_MIME_FILTER_BASIC_BASE64_ENC:
/* wont go to more than 2x size (overly conservative) */
- camel_mime_filter_set_size(mf, len*2, FALSE);
+ camel_mime_filter_set_size(mf, len*2+6, FALSE);
newlen = base64_encode_close(in, len, TRUE, mf->outbuf, &f->state, &f->save);
+ g_assert(newlen <= len*2+6);
break;
case CAMEL_MIME_FILTER_BASIC_QP_ENC:
/* *4 is definetly more than needed ... */
- camel_mime_filter_set_size(mf, len*4, FALSE);
+ camel_mime_filter_set_size(mf, len*4+4, FALSE);
newlen = quoted_encode_close(in, len, mf->outbuf, &f->state, &f->save);
+ g_assert(newlen <= len*4+4);
break;
case CAMEL_MIME_FILTER_BASIC_BASE64_DEC:
/* output can't possibly exceed the input size */
- camel_mime_filter_set_size(mf, len, FALSE);
+ camel_mime_filter_set_size(mf, len, FALSE);
newlen = base64_decode_step(in, len, mf->outbuf, &f->state, &f->save);
+ g_assert(newlen <= len);
break;
case CAMEL_MIME_FILTER_BASIC_QP_DEC:
/* output can't possibly exceed the input size */
camel_mime_filter_set_size(mf, len, FALSE);
newlen = quoted_decode_step(in, len, mf->outbuf, &f->state, &f->save);
+ g_assert(newlen <= len);
break;
default:
g_warning("unknown type %d in CamelMimeFilterBasic", f->type);
@@ -142,23 +146,27 @@ filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, s
switch(f->type) {
case CAMEL_MIME_FILTER_BASIC_BASE64_ENC:
/* wont go to more than 2x size (overly conservative) */
- camel_mime_filter_set_size(mf, len*2, FALSE);
+ camel_mime_filter_set_size(mf, len*2+6, FALSE);
newlen = base64_encode_step(in, len, TRUE, mf->outbuf, &f->state, &f->save);
+ g_assert(newlen <= len*2+6);
break;
case CAMEL_MIME_FILTER_BASIC_QP_ENC:
/* *4 is overly conservative, but will do */
- camel_mime_filter_set_size(mf, len*4, FALSE);
+ camel_mime_filter_set_size(mf, len*4+4, FALSE);
newlen = quoted_encode_step(in, len, mf->outbuf, &f->state, &f->save);
+ g_assert(newlen <= len*4+4);
break;
case CAMEL_MIME_FILTER_BASIC_BASE64_DEC:
/* output can't possibly exceed the input size */
camel_mime_filter_set_size(mf, len, FALSE);
newlen = base64_decode_step(in, len, mf->outbuf, &f->state, &f->save);
+ g_assert(newlen <= len);
break;
case CAMEL_MIME_FILTER_BASIC_QP_DEC:
/* output can't possibly exceed the input size */
camel_mime_filter_set_size(mf, len, FALSE);
newlen = quoted_decode_step(in, len, mf->outbuf, &f->state, &f->save);
+ g_assert(newlen <= len);
break;
default:
g_warning("unknown type %d in CamelMimeFilterBasic", f->type);