another bug in 1.2b1

From: Michael O'Reilly <michael@dont-contact.us>
Date: 28 Oct 1997 09:35:05 +0800

In ipcache.c:

static int
ipcacheExpiredEntry(ipcache_entry * i)
{
    if (i->status == IP_PENDING)
        return 0;
    if (i->status == IP_DISPATCHED)
        return 0;
    if (i->locks != 0)
        return 0;
    if (i->expires >= squid_curtime) /* used to be > instead of >= */
        return 0;
    if (i->status == IP_CACHED)
        if (squid_curtime - i->lastref < 60)
            if (i->addrs.count > 0)
                return 0;
    return 1;
}

The >= is required because ipcacheRemoveBadAddr() sets i->expires =
squid_curtime, but the ipcache_entry could be used again in the same
second. If it is, it may have i->count == 0, which causes fatals etc.

Michael.
Received on Tue Jul 29 2003 - 13:15:44 MDT

This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 16:11:28 MST