]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2013-08-16 Tim Shen <timshen91@gmail.com>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Aug 2013 09:06:31 +0000 (09:06 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Aug 2013 09:06:31 +0000 (09:06 +0000)
* 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

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/regex.h

index 8fea147546827202b31e821a32fc2530d5e42194..0c1cb434f916f15aaa079606ee7b8399c60d741b 100644 (file)
@@ -1,3 +1,8 @@
+2013-08-16  Tim Shen  <timshen91@gmail.com>
+
+       * include/bits/regex.h (regex_traits<>::transform_primary):
+       Avoid past-the-end dereferences.
+
 2013-08-14  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR libstdc++/58163
index 2776749721fc3c5e15d3f1bbceca7fea41c3972c..8fa979fa375967dd1de1e9c847910bcc38dd0c3a 100644 (file)
@@ -220,19 +220,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
         string_type
         transform_primary(_Fwd_iter __first, _Fwd_iter __last) const
         {
-          __try
-            {
-              typedef std::ctype<char_type> __ctype_type;
-              const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
-              std::vector<char_type> __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<char_type> __ctype_type;
+          const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
+          std::vector<char_type> __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)