diff options
| -rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
| -rw-r--r-- | libstdc++-v3/include/bits/basic_string.tcc | 12 | ||||
| -rw-r--r-- | libstdc++-v3/include/ext/vstring.tcc | 12 |
3 files changed, 23 insertions, 8 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 6397850..5250ccc 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,6 +1,13 @@ 2006-09-05 Paolo Carlini <pcarlini@suse.de> * include/bits/basic_string.tcc (find(const _CharT*, size_type, + size_type)): Robustify. + * include/ext/vstring.tcc (find(const _CharT*, size_type, + size_type)): Likewise. + +2006-09-05 Paolo Carlini <pcarlini@suse.de> + + * include/bits/basic_string.tcc (find(const _CharT*, size_type, size_type)): Reimplement in terms of traits::eq and traits::compare. * include/ext/vstring.tcc (find(const _CharT*, size_type, size_type)): Likewise. diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc index 048d0ce..4cf5f29 100644 --- a/libstdc++-v3/include/bits/basic_string.tcc +++ b/libstdc++-v3/include/bits/basic_string.tcc @@ -716,10 +716,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) if (__n == 0) return __pos <= __size ? __pos : npos; - for (; __pos + __n <= __size; ++__pos) - if (traits_type::eq(__data[__pos], __s[0]) - && traits_type::compare(__data + __pos + 1, __s + 1, __n - 1) == 0) - return __pos; + if (__n <= __size) + { + for (; __pos + __n <= __size; ++__pos) + if (traits_type::eq(__data[__pos], __s[0]) + && traits_type::compare(__data + __pos + 1, + __s + 1, __n - 1) == 0) + return __pos; + } return npos; } diff --git a/libstdc++-v3/include/ext/vstring.tcc b/libstdc++-v3/include/ext/vstring.tcc index 5196d10..2a880d9 100644 --- a/libstdc++-v3/include/ext/vstring.tcc +++ b/libstdc++-v3/include/ext/vstring.tcc @@ -277,10 +277,14 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) if (__n == 0) return __pos <= __size ? __pos : npos; - for (; __pos + __n <= __size; ++__pos) - if (traits_type::eq(__data[__pos], __s[0]) - && traits_type::compare(__data + __pos + 1, __s + 1, __n - 1) == 0) - return __pos; + if (__n <= __size) + { + for (; __pos + __n <= __size; ++__pos) + if (traits_type::eq(__data[__pos], __s[0]) + && traits_type::compare(__data + __pos + 1, + __s + 1, __n - 1) == 0) + return __pos; + } return npos; } |
