==============================================================================
-compat/strnstr.cc:
-
-/*-
- * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
- * 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:
/*
## 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 <stdlib.h>
-#include <stdio.h>
-#include <string.h>
- // 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],[
statvfs.h \
stdio.h \
stdvarargs.h \
- strnstr.cc \
strtoll.h \
tempnam.h \
types.h \
#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)))
+++ /dev/null
-/*
- * 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 <mike@FreeBSD.org>
- * 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 <sys/types.h>
-#endif
-#include <cstring>
-
-/**
- * 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_ */
-
{
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.
- */
}
/**