diff --git a/ChangeLog b/ChangeLog index df05833a70..f0c1057889 100644 --- a/ChangeLog +++ b/ChangeLog @@ -846,3 +846,5 @@ * net/recvfrom.c: Fix errors in return value from non-blocking socket read. * lib/lib_strcasecmp.c and lib/lib_strncasecmp.c. Use of post-incremented argument to macro caused strcasecmp() and strncasecmp() to fail. + * lib/lib_strstr.c: Length of substring off by one causes false alarm + sub-string matches. diff --git a/Documentation/NuttX.html b/Documentation/NuttX.html index 509b770aa5..cbaec79772 100644 --- a/Documentation/NuttX.html +++ b/Documentation/NuttX.html @@ -1507,6 +1507,8 @@ nuttx-0.4.11 2009-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr> * net/recvfrom.c: Fix errors in return value from non-blocking socket read. * lib/lib_strcasecmp.c and lib/lib_strncasecmp.c. Use of post-incremented argument to macro caused strcasecmp() and strncasecmp() to fail. + * lib/lib_strstr.c: Length of substring off by one causes false alarm + sub-string matches. pascal-0.1.3 2009-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr> diff --git a/lib/lib_strncmp.c b/lib/lib_strncmp.c index c50ec105ea..147dfc5369 100644 --- a/lib/lib_strncmp.c +++ b/lib/lib_strncmp.c @@ -1,7 +1,7 @@ /**************************************************************************** * lib/lib_strncmp.c * - * Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved. + * Copyright (C) 2007-2009 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -52,10 +52,10 @@ #ifndef CONFIG_ARCH_STRNCMP int strncmp(const char *cs, const char *ct, size_t nb) { - register signed char result = 0; + int result = 0; for (; nb > 0; nb--) { - if ((result = *cs - *ct++) != 0 || !*cs++) + if ((result = (int)*cs - (int)*ct++) != 0 || !*cs++) { break; } diff --git a/lib/lib_strstr.c b/lib/lib_strstr.c index 3649a6ac85..4e2eeb94cb 100644 --- a/lib/lib_strstr.c +++ b/lib/lib_strstr.c @@ -53,7 +53,9 @@ char *strstr(const char *str, const char *substr) /* Special case the empty substring */ - ch = *substr++; + len = strlen(substr); + ch = *substr++; + if (!ch) { /* We'll say that an empty substring matches at the beginning of @@ -66,8 +68,6 @@ char *strstr(const char *str, const char *substr) /* Search for the substring */ candidate = str; - len = strlen(substr); - for (;;) { /* strchr() will return a pointer to the next occurrence of the