$NetBSD$

--- src/mime.c~	2004-08-13 07:18:22.000000000 -0400
+++ src/mime.c	2008-08-31 15:50:42.000000000 -0400
@@ -526,8 +526,9 @@ translate (struct rfc2047 *s, char *to)
 {
         int      ret;
         iconv_t  id = iconv_open (to, s->charset);
-        char    *inptr, *outptr, *result;
-        int      insize, outsize, ressize;
+        const char *inptr;
+        char    *outptr, *result;
+        size_t   insize, outsize, ressize;
         int      bad_chars = 0;
 
         if (id == (iconv_t) -1){
@@ -557,10 +558,17 @@ translate (struct rfc2047 *s, char *to)
                         insize--;
                 }
                 if (errno == E2BIG){
+		    if (ressize * 2 > ressize) {
                         result   = xrealloc (result, ressize * 2);
                         outptr  += ressize - outsize;
                         outsize += ressize;
                         ressize *= 2;
+		    } else {
+		       /* wrong: should report overflow */
+		       /* (but don't want to patch in a new message string) */
+		       bad_chars++;
+		       insize = 0;
+		    }
                 }
         }
 
