> The attached patch fixes this. Just a cosmetic fix - the defined prot_putc now returns EOF in case of error.
diff -r -u cyrus-imapd-2.1.11.orig/lib/prot.c cyrus-imapd-2.1.11/lib/prot.c --- cyrus-imapd-2.1.11.orig/lib/prot.c Mon Oct 21 22:44:22 2002 +++ cyrus-imapd-2.1.11/lib/prot.c Sat Jan 4 23:19:56 2003 @@ -793,6 +793,7 @@ int prot_putc(int c, struct protstream *s) { assert(s->write); + if(s->error || s->eof) return EOF; assert(s->cnt > 0); *s->ptr++ = c; diff -r -u cyrus-imapd-2.1.11.orig/lib/prot.h cyrus-imapd-2.1.11/lib/prot.h --- cyrus-imapd-2.1.11.orig/lib/prot.h Tue Apr 2 05:59:04 2002 +++ cyrus-imapd-2.1.11/lib/prot.h Sat Jan 4 23:21:55 2003 @@ -104,7 +104,7 @@ #define prot_getc(s) ((s)->cnt-- > 0 ? (int)*(s)->ptr++ : prot_fill(s)) #define prot_ungetc(c, s) ((s)->cnt++, (*--(s)->ptr = (c))) -#define prot_putc(c, s) ((*(s)->ptr++ = (c)), --(s)->cnt == 0 ? prot_flush(s) : 0) +#define prot_putc(c, s) (!((s)->error || (s)->eof) ? ((*(s)->ptr++ = (c)), --(s)->cnt == 0 ? prot_flush(s) : 0) : EOF) #define prot_BLOCK(s) ((s)->dontblock = 0) #define prot_NONBLOCK(s) ((s)->dontblock = 1)