dovecot-1.1: charset_to_utf8() may have tried to allocate a lot ...
dovecot at dovecot.org
dovecot at dovecot.org
Fri Mar 27 00:17:46 EET 2009
details: http://hg.dovecot.org/dovecot-1.1/rev/a2013dedbad0
changeset: 8225:a2013dedbad0
user: Timo Sirainen <tss at iki.fi>
date: Thu Mar 26 18:17:09 2009 -0400
description:
charset_to_utf8() may have tried to allocate a lot of memory in some conditions.
diffstat:
1 file changed, 12 insertions(+), 6 deletions(-)
src/lib-charset/charset-iconv.c | 18 ++++++++++++------
diffs (36 lines):
diff -r 3e5494da8e37 -r a2013dedbad0 src/lib-charset/charset-iconv.c
--- a/src/lib-charset/charset-iconv.c Wed Mar 25 15:38:36 2009 -0400
+++ b/src/lib-charset/charset-iconv.c Thu Mar 26 18:17:09 2009 -0400
@@ -129,8 +129,9 @@ charset_to_utf8(struct charset_translati
charset_to_utf8(struct charset_translation *t,
const unsigned char *src, size_t *src_size, buffer_t *dest)
{
+ bool dtcase = (t->flags & CHARSET_FLAG_DECOMP_TITLECASE) != 0;
enum charset_result result;
- size_t pos, used, size;
+ size_t pos, used, size, prev_used = 0;
bool ret;
for (pos = 0;;) {
@@ -143,11 +144,16 @@ charset_to_utf8(struct charset_translati
return result;
}
- /* force buffer to grow */
- used = dest->used;
- size = buffer_get_size(dest) - used + 1;
- (void)buffer_append_space_unsafe(dest, size);
- buffer_set_used_size(dest, used);
+ if (!dtcase) {
+ /* force buffer to grow */
+ used = dest->used;
+ size = buffer_get_size(dest) - used + 1;
+ (void)buffer_append_space_unsafe(dest, size);
+ buffer_set_used_size(dest, used);
+ } else {
+ i_assert(dest->used != prev_used);
+ prev_used = dest->used;
+ }
}
}
More information about the dovecot-cvs
mailing list