updated the crlf filter:
encoder: allocate more memory (3 * len instead of 2 * len) decoder: prevent p from pointing beyond the end of the buffer svn path=/trunk/; revision=3561
This commit is contained in:
@ -1,5 +1,9 @@
|
||||
2000-06-14 Jeffrey Stedfast <fejj@helixcode.com>
|
||||
|
||||
* camel-mime-filter-crlf.c (filter): Updated the encoder to allocate more
|
||||
memory (since we are also now adding dots). Also updated the decoder as we
|
||||
have found that it sometimes passes the end of the buffer.
|
||||
|
||||
* providers/pop3/camel-pop3-folder.c (get_message_by_uid): Took out the
|
||||
filter code ( we already filter in camel_pop3_command_get_additional_data)
|
||||
|
||||
|
||||
@ -76,7 +76,7 @@ filter (CamelMimeFilter *f, char *in, size_t len, size_t prespace,
|
||||
do_dots = crlf->mode == CAMEL_MIME_FILTER_CRLF_MODE_CRLF_DOTS;
|
||||
|
||||
if (crlf->direction == CAMEL_MIME_FILTER_CRLF_ENCODE) {
|
||||
camel_mime_filter_set_size (f, 2 * len, FALSE);
|
||||
camel_mime_filter_set_size (f, 3 * len, FALSE);
|
||||
|
||||
p = in;
|
||||
q = f->outbuf;
|
||||
@ -96,29 +96,29 @@ filter (CamelMimeFilter *f, char *in, size_t len, size_t prespace,
|
||||
while (p < in + len) {
|
||||
if (*p == '\r') {
|
||||
crlf->saw_cr = TRUE;
|
||||
p++;
|
||||
} else {
|
||||
if (crlf->saw_cr) {
|
||||
if (*p != '\n')
|
||||
*q++ = '\r';
|
||||
crlf->saw_cr = FALSE;
|
||||
}
|
||||
*q++ = *p++;
|
||||
*q++ = *p;
|
||||
}
|
||||
|
||||
if (do_dots) {
|
||||
if (*p == '.' && *(p - 1) == '\n') {
|
||||
crlf->saw_dot = TRUE;
|
||||
p++;
|
||||
} else {
|
||||
if (crlf->saw_dot) {
|
||||
if (*p == '.')
|
||||
p++;
|
||||
crlf->saw_dot = FALSE;
|
||||
}
|
||||
*q++ = *p++;
|
||||
*q++ = *p;
|
||||
}
|
||||
}
|
||||
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user