OSDN Git Service

2002-11-01 John Carter <john.carter@tait.co.nz>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Nov 2002 15:21:17 +0000 (15:21 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Nov 2002 15:21:17 +0000 (15:21 +0000)
PR libstdc++/7961
* include/bits/basic_string.tcc
(compare(const _CharT* __s)): Don't access __s past its length.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58717 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/basic_string.tcc

index 3a2ee83..734aa7f 100644 (file)
@@ -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
index 3047dfa..198f190 100644 (file)
@@ -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;
     }