aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Carter <john.carter@tait.co.nz>2002-11-01 15:21:17 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2002-11-01 15:21:17 +0000
commitc86c54e6d12b84a346c77e7101c758c78555c1f3 (patch)
treee9db3d9ecc9aed3287139b8ed768e611f1fedca1
parentd5db54a12c1fec54208876b4137ab09851fe6565 (diff)
downloadgcc-c86c54e6d12b84a346c77e7101c758c78555c1f3.zip
gcc-c86c54e6d12b84a346c77e7101c758c78555c1f3.tar.gz
gcc-c86c54e6d12b84a346c77e7101c758c78555c1f3.tar.bz2
re PR libstdc++/7961 (compare( char *) implemented incorrectly.)
2002-11-01 John Carter <john.carter@tait.co.nz> PR libstdc++/7961 * include/bits/basic_string.tcc (compare(const _CharT* __s)): Don't access __s past its length. From-SVN: r58717
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/include/bits/basic_string.tcc6
2 files changed, 10 insertions, 2 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 3a2ee83..734aa7f 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,9 @@
+2002-11-01 John Carter <john.carter@tait.co.nz>
+
+ PR libstdc++/7961
+ * include/bits/basic_string.tcc
+ (compare(const _CharT* __s)): Don't access __s past its length.
+
2002-10-31 Benjamin Kosnik <bkoz@redhat.com>
PR libstdc++/8348
diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc
index 3047dfa..198f190 100644
--- a/libstdc++-v3/include/bits/basic_string.tcc
+++ b/libstdc++-v3/include/bits/basic_string.tcc
@@ -884,9 +884,11 @@ namespace std
compare(const _CharT* __s) const
{
size_type __size = this->size();
- int __r = traits_type::compare(_M_data(), __s, __size);
+ size_type __osize = traits_type::length(__s);
+ size_type __len = min(__size, __osize);
+ int __r = traits_type::compare(_M_data(), __s, __len);
if (!__r)
- __r = __size - traits_type::length(__s);
+ __r = __size - __osize;
return __r;
}