-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 According to Simon Josefsson on 6/16/2009 1:30 AM: > checking whether strstr works in linear time... no > ... > PASS: test-strstr > > I checked, and the gnulib strstr replacement is used.
Oh. That's because your strstr is already non-linear (your glibc 2.7 is older than when they picked up my strstr implementation, around Feb 2008 and glibc 2.9). So there's only a narrow window of time where glibc has the new strstr that uses memchr with an overestimated length, but also has a broken memchr, and we have not yet run into a host in the wild in that category other than the Debian bug report. All that said, I think I will still commit this patch, unless anyone objects: - -- Don't work too hard, make some time for fun as well! Eric Blake e...@byu.net -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (Cygwin) Comment: Public key at home.comcast.net/~ericblake/eblake.gpg Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAko3jRIACgkQ84KuGfSFAYAnwQCgjG3uuYEhqaLbQ+nJjvOj9I9x DaEAn3ClFYg5cKAQ2GnLCYwacs4hMc8j =wcuk -----END PGP SIGNATURE-----
>From a099937a4efb3208abd6db29d63706439ed42c4f Mon Sep 17 00:00:00 2001 From: Eric Blake <e...@byu.net> Date: Tue, 16 Jun 2009 06:14:05 -0600 Subject: [PATCH] strstr: replace on platforms with broken memchr * m4/strstr.m4 (gl_FUNC_STRSTR): Also replace strstr if the platform version is linear but memchr is broken, per Debian bug 521737. * doc/posix-functions/strstr.texi (strstr): Document the fix. Signed-off-by: Eric Blake <e...@byu.net> --- ChangeLog | 8 ++++++++ doc/posix-functions/strstr.texi | 7 ++++++- m4/strstr.m4 | 9 ++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1a06849..38e62f2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-06-16 Eric Blake <e...@byu.net> + + strstr: replace on platforms with broken memchr + * m4/strstr.m4 (gl_FUNC_STRSTR): Also replace strstr if the + platform version is linear but memchr is broken, per Debian bug + 521737. + * doc/posix-functions/strstr.texi (strstr): Document the fix. + 2009-06-15 Eric Blake <e...@byu.net> hash: avoid memory leak on allocation failure diff --git a/doc/posix-functions/strstr.texi b/doc/posix-functions/strstr.texi index ffd2ad7..2e58050 100644 --- a/doc/posix-functions/strstr.texi +++ b/doc/posix-functions/strstr.texi @@ -11,7 +11,12 @@ Portability problems fixed by Gnulib: @item This function has quadratic instead of linear worst-case complexity on some platforms: -glibc 2.8, MacOS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw. +glibc 2.8, MacOS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, AIX +5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw. + +...@item +This function can trigger memchr bugs on some platforms: +glibc 2.10. @end itemize Portability problems not fixed by Gnulib: diff --git a/m4/strstr.m4 b/m4/strstr.m4 index f48bebb..9f4819d 100644 --- a/m4/strstr.m4 +++ b/m4/strstr.m4 @@ -1,5 +1,5 @@ -# strstr.m4 serial 5 -dnl Copyright (C) 2008 Free Software Foundation, Inc. +# strstr.m4 serial 6 +dnl Copyright (C) 2008, 2009 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -8,6 +8,7 @@ dnl Check that strstr is efficient. AC_DEFUN([gl_FUNC_STRSTR], [ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_REQUIRE([gl_FUNC_MEMCHR]) AC_CACHE_CHECK([whether strstr works in linear time], [gl_cv_func_strstr_linear], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ @@ -57,7 +58,9 @@ AC_DEFUN([gl_FUNC_STRSTR], [gl_cv_func_strstr_linear="guessing no"]) ]) ]) - if test "$gl_cv_func_strstr_linear" != yes; then + # If strstr is quadratic, or if memchr is broken (as in glibc 2.10 on + # some 64-bit architectures), then we need the replacement. + if test "$gl_cv_func_strstr_linear$gl_cv_func_memchr_works" != yesyes; then REPLACE_STRSTR=1 AC_LIBOBJ([strstr]) fi -- 1.6.3.rc3.2.g4b51