Mercurial > dovecot > original-hg > dovecot-1.2
comparison src/lib-charset/charset-iconv.c @ 9586:97b702abd132 HEAD
lib-charset: Don't assert-crash when iconv() skips lots of invalid input.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 21 Jun 2010 21:17:58 +0100 |
parents | 00cd9aacd03c |
children | 91c605339e45 |
comparison
equal
deleted
inserted
replaced
9585:cdc66c6e0c6f | 9586:97b702abd132 |
---|---|
129 charset_to_utf8(struct charset_translation *t, | 129 charset_to_utf8(struct charset_translation *t, |
130 const unsigned char *src, size_t *src_size, buffer_t *dest) | 130 const unsigned char *src, size_t *src_size, buffer_t *dest) |
131 { | 131 { |
132 bool dtcase = (t->flags & CHARSET_FLAG_DECOMP_TITLECASE) != 0; | 132 bool dtcase = (t->flags & CHARSET_FLAG_DECOMP_TITLECASE) != 0; |
133 enum charset_result result; | 133 enum charset_result result; |
134 size_t pos, used, size, prev_used = 0; | 134 size_t pos, used, size, prev_pos = 0, prev_used = 0; |
135 bool ret; | 135 bool ret; |
136 | 136 |
137 for (pos = 0;;) { | 137 for (pos = 0;;) { |
138 size = *src_size - pos; | 138 size = *src_size - pos; |
139 ret = charset_to_utf8_try(t, src + pos, &size, dest, &result); | 139 ret = charset_to_utf8_try(t, src + pos, &size, dest, &result); |
149 used = dest->used; | 149 used = dest->used; |
150 size = buffer_get_size(dest) - used + 1; | 150 size = buffer_get_size(dest) - used + 1; |
151 (void)buffer_append_space_unsafe(dest, size); | 151 (void)buffer_append_space_unsafe(dest, size); |
152 buffer_set_used_size(dest, used); | 152 buffer_set_used_size(dest, used); |
153 } else { | 153 } else { |
154 i_assert(dest->used != prev_used); | 154 i_assert(dest->used != prev_used || pos != prev_pos); |
155 prev_pos = pos; | |
155 prev_used = dest->used; | 156 prev_used = dest->used; |
156 } | 157 } |
157 } | 158 } |
158 } | 159 } |
159 | 160 |