On Sat, 2009-03-21 at 18:58 -0400, David Halik wrote:
> Mar 21 18:43:57 er0.rutgers.edu IMAP(dhalik): : [ID 107833 mail.crit] 
> Panic: Trying to allocate 2147483648 bytes

Attached patch probably helps?

diff -r 1adea68d749b src/lib-charset/charset-iconv.c
--- a/src/lib-charset/charset-iconv.c	Mon Mar 23 17:40:32 2009 -0400
+++ b/src/lib-charset/charset-iconv.c	Tue Mar 24 12:41:11 2009 -0400
@@ -130,10 +130,11 @@
 		const unsigned char *src, size_t *src_size, buffer_t *dest)
 {
 	enum charset_result result;
-	size_t pos, used, size;
+	size_t pos, used, size, prev_used;
 	bool ret;
 
 	for (pos = 0;;) {
+		prev_used = dest->used;
 		size = *src_size - pos;
 		ret = charset_to_utf8_try(t, src + pos, &size, dest, &result);
 		pos += size;
@@ -146,6 +147,13 @@
 		/* force buffer to grow */
 		used = dest->used;
 		size = buffer_get_size(dest) - used + 1;
+		if (used == prev_used && size > 1024) {
+			/* workaround for a buggy Solaris iconv: it's going to
+			   keep returning E2BIG. Skip over a character and
+			   hope that all goes well. */
+			*src_size = pos + 1;
+			return CHARSET_RET_INVALID_INPUT;
+		}
 		(void)buffer_append_space_unsafe(dest, size);
 		buffer_set_used_size(dest, used);
 	}

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to