bug in the proxy module ...

Wesley Craig wes at umich.edu
Mon Jun 9 15:29:15 EDT 2008


Looks like this change:

	https://bugzilla.andrew.cmu.edu/cgi-bin/cvsweb.cgi/src/cyrus/imap/ 
proxy.c.diff?r1=1.3;r2=1.4

is in error.  The old code was wrong, but this change is also wrong.

:wes

On 09 Jun 2008, at 08:52, Brasseur Valery wrote:
> I am using cyrus 2.3.11 in a murder setup... from time to time have  
> got an hang from the pop3 proxyd ...
>
> I nail it donw to the following portion of code :
> in imap/proxy.c near line 266 :
> <quote>
>        if (pout) {
>                 const char *err;
>                 char buf[4096];
>                 int c;
>
>                 do {
>                     c = prot_read(pin, buf, sizeof(buf));
>
>                     if (c == 0 || c < 0) break;
>                     prot_write(pout, buf, c);
>                 } while (c == sizeof(buf));
>
>                 if ((err = prot_error(pin)) != NULL) { </quote>
>
> from time to time, the prot_read return exactly 4096 bytes, but  
> it's the end of the message...
> so backend seat and wait for next command, and proxy seat and wait  
> for the next buffer ...
> forever !
>
> for me it's seems that the condition " c == sizeof(buf)" is not  
> enough in that case.


More information about the Cyrus-devel mailing list