From 9d3433c4ac6cd547c10cf298b8a5e61a463fb753 Mon Sep 17 00:00:00 2001 From: Amos Jeffries Date: Tue, 5 Mar 2024 15:12:24 +0000 Subject: [PATCH] Remove unused strnstr() replacement (#1721) Squid code does not actually use strnstr() so this copy of FreeBSD code does not need to be shipped. --- CREDITS | 41 ----------------- acinclude/os-deps.m4 | 28 ------------ compat/Makefile.am | 1 - compat/compat_shared.h | 11 ----- compat/strnstr.cc | 101 ----------------------------------------- src/StrList.cc | 8 ---- 6 files changed, 190 deletions(-) delete mode 100644 compat/strnstr.cc diff --git a/CREDITS b/CREDITS index cd2e4cdb22..6d16efd47c 100644 --- a/CREDITS +++ b/CREDITS @@ -438,47 +438,6 @@ compat/tempnam.c: ============================================================================== -compat/strnstr.cc: - -/*- - * Copyright (c) 2001 Mike Barcroft - * Copyright (c) 1990, 1993 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Chris Torek. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)strstr.c 8.1 (Berkeley) 6/4/93 - * $FreeBSD: src/lib/libc/string/strnstr.c,v 1.2.2.1 2001/12/09 06:50:03 mike Exp $ - * $DragonFly: src/lib/libc/string/strnstr.c,v 1.4 2006/03/20 17:24:20 dillon Exp $ - */ - -============================================================================== - compat/xstrto.cc: /* diff --git a/acinclude/os-deps.m4 b/acinclude/os-deps.m4 index 85da54aeab..a739c02f6b 100644 --- a/acinclude/os-deps.m4 +++ b/acinclude/os-deps.m4 @@ -5,34 +5,6 @@ ## Please see the COPYING and CONTRIBUTORS files for details. ## -dnl check that strnstr() works fine. On Macos X it can cause a buffer overrun -dnl sets squid_cv_func_strnstr to "yes" or "no", and defines HAVE_STRNSTR -AC_DEFUN([SQUID_CHECK_FUNC_STRNSTR],[ - - # Yay! This one is a MacOSX brokenness. Its not good enough - # to know that strnstr() exists, because MacOSX 10.4 have a bad - # copy that crashes with a buffer over-run! - AH_TEMPLATE(HAVE_STRNSTR,[MacOS brokenness: strnstr() can overrun on that system]) - AC_CACHE_CHECK([if strnstr is well implemented], squid_cv_func_strnstr, - AC_RUN_IFELSE([AC_LANG_SOURCE([[ -#include -#include -#include - // we expect this to succeed, or crash on over-run. - // if it passes otherwise we may need a better check. -int main(int argc, char **argv) -{ - int size = 20; - char *str = malloc(size); - memset(str, 'x', size); - strnstr(str, "fubar", size); - return 0; -} - ]])],[squid_cv_func_strnstr="yes"],[squid_cv_func_strnstr="no"],[:]) - ) - AS_IF([test "x$squid_cv_func_strnstr" = "xyes"],[AC_DEFINE(HAVE_STRNSTR,1)]) -]) dnl SQUID_CHECK_FUNC_STRNSTR - dnl check that epoll actually works dnl sets squid_cv_epoll_works to "yes" or "no" AC_DEFUN([SQUID_CHECK_EPOLL],[ diff --git a/compat/Makefile.am b/compat/Makefile.am index e4200d1110..028e817d53 100644 --- a/compat/Makefile.am +++ b/compat/Makefile.am @@ -69,7 +69,6 @@ libcompatsquid_la_SOURCES = \ statvfs.h \ stdio.h \ stdvarargs.h \ - strnstr.cc \ strtoll.h \ tempnam.h \ types.h \ diff --git a/compat/compat_shared.h b/compat/compat_shared.h index 905e53e6d5..85eaaf7afa 100644 --- a/compat/compat_shared.h +++ b/compat/compat_shared.h @@ -227,17 +227,6 @@ extern "C" { #define memmove(d,s,n) bcopy((s),(d),(n)) #endif -/* - * strnstr() is needed. The OS may not provide a working copy. - */ -#if HAVE_STRNSTR -/* If strnstr exists and is usable we do so. */ -#define squid_strnstr(a,b,c) strnstr(a,b,c) -#else -/* If not we have our own copy imported from FreeBSD */ -const char * squid_strnstr(const char *s, const char *find, size_t slen); -#endif - #if __GNUC__ #if _SQUID_MINGW_ #define PRINTF_FORMAT_ARG1 __attribute__ ((format (gnu_printf, 1, 2))) diff --git a/compat/strnstr.cc b/compat/strnstr.cc deleted file mode 100644 index cccebd9565..0000000000 --- a/compat/strnstr.cc +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 1996-2023 The Squid Software Foundation and contributors - * - * Squid software is distributed under GPLv2+ license and includes - * contributions from numerous individuals and organizations. - * Please see the COPYING and CONTRIBUTORS files for details. - */ - -#ifndef SQUID_COMPAT_STRNSTR_CC_ -#define SQUID_COMPAT_STRNSTR_CC_ - -/* - * Shamelessly duplicated from the FreeBSD public sources - * for use by the Squid Project under GNU Public License. - * - * Update/Maintenance History: - * - * 26-Apr-2008 : Copied from FreeBSD via OpenGrok - * - added protection around library headers - * - added squid_ prefix for uniqueness - * so we can use it where OS copy is broken. - * - * Original License and code follows. - */ - -#include "squid.h" - -#if !HAVE_STRNSTR - -/*- - * Copyright (c) 2001 Mike Barcroft - * Copyright (c) 1990, 1993 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Chris Torek. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)strstr.c 8.1 (Berkeley) 6/4/93 - * $FreeBSD: src/lib/libc/string/strnstr.c,v 1.2.2.1 2001/12/09 06:50:03 mike Exp $ - * $DragonFly: src/lib/libc/string/strnstr.c,v 1.4 2006/03/20 17:24:20 dillon Exp $ - */ - -#if HAVE_SYS_TYPES_H -#include -#endif -#include - -/** - * Find the first occurrence of find in s, where the search is limited to the - * first slen characters of s. - */ -const char * -squid_strnstr(const char *s, const char *find, size_t slen) -{ - char c, sc; - size_t len; - - if ((c = *find++) != '\0') { - len = strlen(find); - do { - do { - if (slen < 1 || (sc = *s) == '\0') - return nullptr; - --slen; - ++s; - } while (sc != c); - if (len > slen) - return nullptr; - } while (strncmp(s, find, len) != 0); - --s; - } - return s; -} - -#endif /* !HAVE_STRNSTR */ -#endif /* SQUID_COMPAT_STRNSTR_CC_ */ - diff --git a/src/StrList.cc b/src/StrList.cc index c0c6c82a6d..f706427ef7 100644 --- a/src/StrList.cc +++ b/src/StrList.cc @@ -64,14 +64,6 @@ strListIsSubstr(const String * list, const char *s, char del) { assert(list && del); return (list->find(s) != String::npos); - - /** \note - * Note: the original code with a loop is broken because it uses strstr() - * instead of strnstr(). If 's' contains a 'del', strListIsSubstr() may - * return true when it should not. If 's' does not contain a 'del', the - * implementation is equavalent to strstr()! Thus, we replace the loop with - * strstr() above until strnstr() is available. - */ } /** -- 2.39.5