From: Andreas Jaeger Date: Thu, 18 May 2000 05:35:38 +0000 (+0000) Subject: Update. X-Git-Tag: cvs/glibc_2-1-91~416 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1261b97d10f60dfc7acc534a065bbe6ceef99f4f;p=thirdparty%2Fglibc.git Update. * sysdeps/generic/memmem.c (memmem): Check arguments to avoid possibly searching through the whole memory. Closes PR libc/1730, reported by Greg Hudson . --- diff --git a/ChangeLog b/ChangeLog index 086f8e4bdb1..91e2c193fbf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21,6 +21,10 @@ * string/strings.h: Add pure and const attributes if possible. + * sysdeps/generic/memmem.c (memmem): Check arguments to avoid + possibly searching through the whole memory. + Closes PR libc/1730, reported by Greg Hudson . + 2000-05-17 Jakub Jelinek * sysdeps/generic/dl-cache.h (_DL_CACHE_DEFAULT_ID): Only define if diff --git a/sysdeps/generic/memmem.c b/sysdeps/generic/memmem.c index 9e32f517b31..e9b270870a4 100644 --- a/sysdeps/generic/memmem.c +++ b/sysdeps/generic/memmem.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 92, 93, 94, 96, 97, 98 Free Software Foundation, Inc. +/* Copyright (C) 1991,92,93,94,96,97,98,2000 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -38,6 +38,11 @@ memmem (haystack, haystack_len, needle, needle_len) the beginning of the string. */ return (void *) haystack; + /* Sanity check, otherwise the loop might search through the whole + memory. */ + if (__builtin_expect (haystack_len < needle_len, 0)) + return NULL; + for (begin = (const char *) haystack; begin <= last_possible; ++begin) if (begin[0] == ((const char *) needle)[0] && !memcmp ((const void *) &begin[1],