[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: bug in autoconf-2.64

From: Eric Blake
Subject: Re: bug in autoconf-2.64
Date: Thu, 24 Feb 2011 10:15:54 -0700
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv: Gecko/20101209 Fedora/3.1.7-0.35.b3pre.fc14 Lightning/1.0b3pre Mnenhy/0.8.3 Thunderbird/3.1.7

[dropping bug-autoconf, bug-m4]

On 02/24/2011 09:04 AM, Jim Meyering wrote:
> FYI,
> Here's a much-reduced test case for the short-needle case:
>     const char *needle = ".d.";
>     const char *haystack = "..d.";
>     const char* p = strstr (haystack, needle);
>     ASSERT (p && p - haystack == 1);
> Interestingly, it doesn't trigger a failure in glibc's
> slightly different implementation.  Eric mentioned
> privately that glibc does not yet have gnulib's commit
> fffd5faca, and that affects periodicity detection.

Not quite right.  But Jim and I did discover:

needle "." and haystack "..wi.d." fails with gnulib.

Definitely the fault of commit fffd5faca; the comments state that
critical_factorization() will set period to something less than the
global period of the needle.  When starting the search at index 0 (as in
glibc or pre-"optimization"), this statement is true.  But when starting
the search at index 1 (post-patch), then critical_factorization() can
sometimes pick a factorization equal to rather than less than the
needle's global period, and the rest of the code was not prepared for this.

I'm still inspecting whether this optimization still makes sense (that
is, does Jim's one-liner change to remove the +1 re-computation of the
shifting period always works, or should fffd5faca be reverted).  And at
this point, I'm fairly confident that both glibc and cygwin are immune,
since neither of them borrowed from gnulib's optimization), but not
necessarily optimal.

Eric Blake   address@hidden    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

reply via email to

[Prev in Thread] Current Thread [Next in Thread]