From: paolo Date: Fri, 16 Aug 2013 09:06:31 +0000 (+0000) Subject: 2013-08-16 Tim Shen X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c2148dd0c786239bd3345fa0f07ceff563a3c14b;p=thirdparty%2Fgcc.git 2013-08-16 Tim Shen * include/bits/regex.h (regex_traits<>::transform_primary): Avoid past-the-end dereferences. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@201783 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 8fea14754682..0c1cb434f916 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2013-08-16 Tim Shen + + * include/bits/regex.h (regex_traits<>::transform_primary): + Avoid past-the-end dereferences. + 2013-08-14 Paolo Carlini PR libstdc++/58163 diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h index 2776749721fc..8fa979fa3759 100644 --- a/libstdc++-v3/include/bits/regex.h +++ b/libstdc++-v3/include/bits/regex.h @@ -220,19 +220,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION string_type transform_primary(_Fwd_iter __first, _Fwd_iter __last) const { - __try - { - typedef std::ctype __ctype_type; - const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale)); - std::vector __v(__first, __last); - // FIXME : this is not entirely correct - __fctyp.tolower(&*__v.begin(), &*__v.end()); - return this->transform(&*__v.begin(), &*__v.end()); - } - __catch (std::bad_cast) - { - } - return string_type(); + typedef std::ctype __ctype_type; + const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale)); + std::vector __s(__first, __last); + // FIXME : this is not entirely correct + __fctyp.tolower(__s.data(), __s.data() + __s.size()); + return this->transform(__s.data(), __s.data() + __s.size()); } /** @@ -572,7 +565,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION std::string __s(__last - __first, '?'); __fctyp.narrow(__first, __last, '?', &__s[0]); - __cctyp.tolower(&*__s.begin(), &*__s.end()); + __cctyp.tolower(&*__s.begin(), &*__s.begin() + __s.size()); for (_ClassnameEntry* __it = __classnames; __it < *(&__classnames + 1); ++__it)