summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog-98b9
-rw-r--r--ace/OS.i4
-rw-r--r--ace/SString.cpp2
-rw-r--r--tests/SString_Test.cpp38
4 files changed, 36 insertions, 17 deletions
diff --git a/ChangeLog-98b b/ChangeLog-98b
index cb791957e6a..d239f7932f8 100644
--- a/ChangeLog-98b
+++ b/ChangeLog-98b
@@ -1,3 +1,12 @@
+Wed Aug 05 00:10:27 1998 Irfan Pyarali <irfan@cs.wustl.edu>
+
+ * ace/OS.i (strnstr (both Unicode and Multibyte versions)):
+ * ace/SString.cpp (strstr):
+ Fixed "off by one error" in searching algorithm. Thanks to
+ Byron Harris <harris_b@ociweb.com> for pointing this out.
+
+ * tests/SString_Test.cpp (main): Added new test cases.
+
Tue Aug 4 21:56:16 1998 Nanbor Wang <nanbor@cs.wustl.edu>
* tests/TSS_Test.cpp:
diff --git a/ace/OS.i b/ace/OS.i
index 259282e309c..21c63b1d590 100644
--- a/ace/OS.i
+++ b/ace/OS.i
@@ -1263,7 +1263,7 @@ ACE_INLINE const char *
ACE_OS::strnstr (const char *s, const char *t, size_t len)
{
size_t t_len = ::strlen (t);
- for (size_t i = 0; i < len - t_len; i++)
+ for (size_t i = 0; i <= len - t_len; i++)
if (::memcmp (s + i, t, t_len) == 0)
return s + i;
@@ -9115,7 +9115,7 @@ ACE_INLINE const wchar_t *
ACE_OS::strnstr (const wchar_t *s, const wchar_t *t, size_t len)
{
size_t t_len = ACE_OS::strlen (t);
- for (size_t i = 0; i < len - t_len; i++)
+ for (size_t i = 0; i <= len - t_len; i++)
if (::memcmp (s + i, t, t_len * sizeof (wchar_t)) == 0)
return s + i;
diff --git a/ace/SString.cpp b/ace/SString.cpp
index 71b24adc6fa..b630b082d1a 100644
--- a/ace/SString.cpp
+++ b/ace/SString.cpp
@@ -876,7 +876,7 @@ ACE_WString::strstr (const ACE_USHORT16 *s1, const ACE_USHORT16 *s2)
size_t len = len1 - len2;
- for (size_t i = 0; i < len; i++)
+ for (size_t i = 0; i <= len; i++)
{
size_t j;
diff --git a/tests/SString_Test.cpp b/tests/SString_Test.cpp
index 58deea103ac..786b5b1ce0d 100644
--- a/tests/SString_Test.cpp
+++ b/tests/SString_Test.cpp
@@ -36,14 +36,18 @@ main (int, ASYS_TCHAR *[])
{
ACE_CString s1 ("hello");
ACE_CString s2 ("world");
- ACE_CString s3 ("el");
+ ACE_CString s3 ("ll");
+ ACE_CString s4 ("ello");
+ ACE_CString s5 = s1 + " " + s2;
ACE_ASSERT (s1 != s2);
+ ACE_ASSERT (s1 != s5);
ACE_ASSERT (s1.strstr (s2) == -1);
- ACE_ASSERT (s1.strstr (s3));
+ ACE_ASSERT (s1.strstr (s3) == 2);
+ ACE_ASSERT (s1.strstr (s4) == 1);
- ACE_ASSERT (s1.find (s3) == 1);
- ACE_ASSERT (s1.find (s3, 2) == ACE_CString::npos);
+ ACE_ASSERT (s1.find (s3) == 2);
+ ACE_ASSERT (s1.find (s3, 2) == 0);
ACE_ASSERT (s1.find (s2) == ACE_CString::npos);
ACE_ASSERT (s1.find ('o') == 4);
ACE_ASSERT (s1.rfind ('l') == 3);
@@ -53,16 +57,18 @@ main (int, ASYS_TCHAR *[])
{
ACE_CString s1 ("hello", 0, 0);
ACE_CString s2 ("world", 0, 0);
- ACE_CString s3 ("el", 0, 0);
- ACE_CString s4 = s1 + " " + s2;
+ ACE_CString s3 ("ll", 0, 0);
+ ACE_CString s4 ("ello", 0, 0);
+ ACE_CString s5 = s1 + " " + s2;
ACE_ASSERT (s1 != s2);
- ACE_ASSERT (s1 != s4);
+ ACE_ASSERT (s1 != s5);
ACE_ASSERT (s1.strstr (s2) == -1);
- ACE_ASSERT (s1.strstr (s3));
+ ACE_ASSERT (s1.strstr (s3) == 2);
+ ACE_ASSERT (s1.strstr (s4) == 1);
- ACE_ASSERT (s1.find (s3) == 1);
- ACE_ASSERT (s1.find (s3, 2) == ACE_CString::npos);
+ ACE_ASSERT (s1.find (s3) == 2);
+ ACE_ASSERT (s1.find (s3, 2) == 0);
ACE_ASSERT (s1.find (s2) == ACE_CString::npos);
ACE_ASSERT (s1.find ('o') == 4);
ACE_ASSERT (s1.rfind ('l') == 3);
@@ -72,14 +78,18 @@ main (int, ASYS_TCHAR *[])
{
ACE_WString s1 ("hello");
ACE_WString s2 ("world");
- ACE_WString s3 ("el");
+ ACE_WString s3 ("ll");
+ ACE_WString s4 ("ello");
+ ACE_WString s5 = s1 + " " + s2;
ACE_ASSERT (s1 != s2);
+ ACE_ASSERT (s1 != s5);
ACE_ASSERT (s1.strstr (s2) == -1);
- ACE_ASSERT (s1.strstr (s3));
+ ACE_ASSERT (s1.strstr (s3) == 2);
+ ACE_ASSERT (s1.strstr (s4) == 1);
- ACE_ASSERT (s1.find (s3) == 1);
- ACE_ASSERT (s1.find (s3, 2) == ACE_WString::npos);
+ ACE_ASSERT (s1.find (s3) == 2);
+ ACE_ASSERT (s1.find (s3, 2) == 0);
ACE_ASSERT (s1.find (s2) == ACE_WString::npos);
ACE_ASSERT (s1.find ('o') == 4);
ACE_ASSERT (s1.rfind ('l') == 3);