d95d85
diff --git a/src/iri.c b/src/iri.c
d95d85
index 9b16639..da9dc7f 100644
d95d85
--- a/src/iri.c
d95d85
+++ b/src/iri.c
d95d85
@@ -183,17 +183,12 @@ do_conversion (iconv_t cd, char *in, size_t inlen, char **out)
d95d85
         }
d95d85
       else if (errno == E2BIG) /* Output buffer full */
d95d85
         {
d95d85
-          char *new;
d95d85
-
d95d85
           tooshort++;
d95d85
           done = len;
d95d85
-          outlen = done + inlen * 2;
d95d85
-          new = xmalloc (outlen + 1);
d95d85
-          memcpy (new, s, done);
d95d85
-          xfree (s);
d95d85
-          s = new;
d95d85
-          len = outlen;
d95d85
-          *out = s + done;
d95d85
+          len = done + inlen * 2;
d95d85
+          s = xrealloc (s, len + 1);
d95d85
+          *out = s + done - outlen;
d95d85
+          outlen += inlen * 2;
d95d85
         }
d95d85
       else /* Weird, we got an unspecified error */
d95d85
         {