Xref: utzoo news.software.b:5676 comp.sources.bugs:2536 Newsgroups: news.software.b,comp.sources.bugs Path: utzoo!henry From: henry@zoo.toronto.edu (Henry Spencer) Subject: Re: C News patch of 1-Sep-1990 (URGENT!!!) (tentative fix) Message-ID: <1990Sep6.233718.13807@zoo.toronto.edu> Organization: U of Toronto Zoology References: <1990Sep5.194901.7571@zoo.toronto.edu> <1990Sep6.193712.7491@zoo.toronto.edu> <1990Sep6.215811.11242@zoo.toronto.edu> Date: Thu, 6 Sep 90 23:37:18 GMT The problem has been found: an interlocking pair of bugs in the is-this- site-already-in-the-Path logic. It ends up saying "no" in cases where it should say "yes", thus causing articles to be looped back to the site you get them from (where they generally get rejected as duplicates immediately, so this is fairly benign). And certain arcane combinations of circumstances cause it to answer "yes" when it should say "no", thus preventing articles from being fed onward. The arcane circumstances are sufficiently obscure that the regression test missed them: it happens only with certain combinations of name lengths and is sensitive to the occurrence of the site's first character in the Path! For the benefit of those who are already running with this code and can't easily fall back, here is the tentative fix. This is not an official patch; one will be forthcoming in a day or two when this is more thoroughly tested. If you haven't installed the 1-Sep patch yet, we suggest you wait for the official correction. *** string.c.orig Thu Jul 19 11:10:08 1990 --- string.c Thu Sep 6 19:00:29 1990 *************** *** 271,277 **** STRCHR(pathp, host[0], nxpathp); /* find plausible start */ if (nxpathp == NULL) return NULL; /* path exhausted */ ! if (STREQN(pathp, host, hostlen) == 0 && (pathp == path || nothostchar(pathp[-1])) && nothostchar(pathp[hostlen])) return &pathp[hostlen]; --- 271,278 ---- STRCHR(pathp, host[0], nxpathp); /* find plausible start */ if (nxpathp == NULL) return NULL; /* path exhausted */ ! pathp = nxpathp; ! if (STREQN(pathp, host, hostlen) && (pathp == path || nothostchar(pathp[-1])) && nothostchar(pathp[hostlen])) return &pathp[hostlen]; -- TCP/IP: handling tomorrow's loads today| Henry Spencer at U of Toronto Zoology OSI: handling yesterday's loads someday| henry@zoo.toronto.edu utzoo!henry