diff options
-rw-r--r-- | ChangeLog-98b | 9 | ||||
-rw-r--r-- | ace/OS.i | 4 | ||||
-rw-r--r-- | ace/SString.cpp | 2 | ||||
-rw-r--r-- | tests/SString_Test.cpp | 38 |
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: @@ -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); |