From 8ec0fc92edfe0236e08cd75de52bdf5c10c38828 Mon Sep 17 00:00:00 2001
From: patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>
Date: Sat, 15 Aug 2009 22:59:41 +0000
Subject: [PATCH] strstr fails because length off by 1

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2022 42af7a65-404d-4744-a932-0658087f49c3
---
 ChangeLog                | 2 ++
 Documentation/NuttX.html | 2 ++
 lib/lib_strncmp.c        | 6 +++---
 lib/lib_strstr.c         | 6 +++---
 4 files changed, 10 insertions(+), 6 deletions(-)

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 &lt;spudmonkey@racsa.co.cr&gt;
 	* 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 &lt;spudmonkey@racsa.co.cr&gt;
 
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 <spudmonkey@racsa.co.cr>
  *
  * 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
-- 
GitLab