I decided to fix utf8.c in a slightly different (but equivalent) way, and also fixed the body->location cleanup problem too. See attached diffs.
-- Mark --
http://staff.washington.edu/mrc Science does not emerge from voting, party politics, or public debate. Si vis pacem, para bellum.
*** mail.c 2004/04/08 23:05:05 1.52
--- mail.c 2004/04/18 16:16:03
***************
*** 10,16 ****
* Internet: [EMAIL PROTECTED]
*
* Date: 22 November 1989
! * Last Edited: 8 April 2004
*
* The IMAP toolkit provided in this Distribution is
* Copyright 1988-2004 University of Washington.
--- 10,16 ----
* Internet: [EMAIL PROTECTED]
*
* Date: 22 November 1989
! * Last Edited: 18 April 2004
*
* The IMAP toolkit provided in this Distribution is
* Copyright 1988-2004 University of Washington.
***************
*** 5504,5509 ****
--- 5504,5510 ----
if (body->disposition.parameter)
mail_free_body_parameter (&body->disposition.parameter);
if (body->language) mail_free_stringlist (&body->language);
+ if (body->location) fs_give ((void **) &body->location);
if (body->mime.text.data) fs_give ((void **) &body->mime.text.data);
if (body->contents.text.data) fs_give ((void **) &body->contents.text.data);
if (body->md5) fs_give ((void **) &body->md5);
*** utf8.c 2004/03/16 23:56:02 1.14
--- utf8.c 2004/04/18 16:16:08
***************
*** 10,16 ****
* Internet: [EMAIL PROTECTED]
*
* Date: 11 June 1997
! * Last Edited: 15 March 2004
*
* The IMAP toolkit provided in this Distribution is
* Copyright 1988-2004 University of Washington.
--- 10,16 ----
* Internet: [EMAIL PROTECTED]
*
* Date: 11 June 1997
! * Last Edited: 18 April 2004
*
* The IMAP toolkit provided in this Distribution is
* Copyright 1988-2004 University of Washington.
***************
*** 376,382 ****
break;
case CT_1BYTE: /* 1 byte ASCII + table 0x80-0xff */
for (tab = (unsigned short *) cs->tab,i = 128; i < 256; i++)
! if (tab[i] != UBOGON) rmap[tab[i]] = (unsigned short) i;
break;
case CT_1BYTE8: /* 1 byte table 0x00 - 0xff */
for (tab = (unsigned short *) cs->tab,i = 0; i < 256; i++)
--- 376,383 ----
break;
case CT_1BYTE: /* 1 byte ASCII + table 0x80-0xff */
for (tab = (unsigned short *) cs->tab,i = 128; i < 256; i++)
! if (tab[i & BITS7] != UBOGON) rmap[tab[i & BITS7]] =
! (unsigned short) i;
break;
case CT_1BYTE8: /* 1 byte table 0x00 - 0xff */
for (tab = (unsigned short *) cs->tab,i = 0; i < 256; i++)
