reopen 405704

> Changes: 
>  up-imapproxy (1.2.4-8) unstable; urgency=high
>  .
>    * Fixed crash on startup when IMAP server is not available (Closes: 
> #405704)

The patch provided by Kees Cook was correct, but you only applied half
of it. Let's have a look at the code:

    for ( ai = ISD.ai; ; ai = ai->ai_next ) {
[... boring stuff ...]
        else
        {
          break; /* Success */
        }

        if (!(ai=ai->ai_next)) {
            syslog(LOG_ERR, "%s: connect() failed to all addresses.", fn);
            sleep( 15 );    /* IMAP server may not be started yet. */
            ai = ISD.ai;
        }
    }

What now happens is that if the connect to the first address failed, you
get the next address ("ai=ai->ai_next"), check that it is not NULL (if
!) and then hop to the beginning of the loop again, where you will see
that "ai = ai->ai_next" happens again. Not good.

So, you either need to do if (! ai->ai_next), or use for (ai=ISD.ai;;)
{, or do something like this:

ai = ISD.ai
while (ai) {
      [...]
      if (!(ai=ai->ai_next)) {
...

That last proposal looks best to me, but that's because I don't know if
ISD.ai can be assumed to be != NULL or not.

Anyway, fix it.

Marc
-- 
Fachbegriffe der Informatik - Einfach erklärt
286: Googlehupf
       Abstand zwischen zwei Suchergebnissen.

Attachment: pgpuRndhUWZgn.pgp
Description: PGP signature

Reply via email to