From a7df35ce2130a99f26c4c8315ce46bf10804280e Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 24 Apr 2018 08:03:23 +0200 Subject: Curl_memchr: zero length input can't match Avoids undefined behavior. Reported-by: Geeknik Labs --- lib/curl_memrchr.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'lib') diff --git a/lib/curl_memrchr.c b/lib/curl_memrchr.c index c521497b2..eeb3044a9 100644 --- a/lib/curl_memrchr.c +++ b/lib/curl_memrchr.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2016, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2018, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -44,17 +44,18 @@ void * Curl_memrchr(const void *s, int c, size_t n) { - const unsigned char *p = s; - const unsigned char *q = s; + if(n > 0) { + const unsigned char *p = s; + const unsigned char *q = s; - p += n - 1; + p += n - 1; - while(p >= q) { - if(*p == (unsigned char)c) - return (void *)p; - p--; + while(p >= q) { + if(*p == (unsigned char)c) + return (void *)p; + p--; + } } - return NULL; } -- cgit v1.2.3