summaryrefslogtreecommitdiffstats
path: root/libcxx
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2013-06-29 23:45:43 +0000
committerHoward Hinnant <hhinnant@apple.com>2013-06-29 23:45:43 +0000
commit660f2ae422bcf336a435e8dd661e8458ab786890 (patch)
tree556273ff28f07944719cfd7c889deb8ac9a4da8c /libcxx
parent7a69d2c06adefd557ce2eb58ad0ccbb69de78c22 (diff)
downloadbcm5719-llvm-660f2ae422bcf336a435e8dd661e8458ab786890.tar.gz
bcm5719-llvm-660f2ae422bcf336a435e8dd661e8458ab786890.zip
Prevent '\b' from backing up into invalid memory. Fixes http://llvm.org/bugs/show_bug.cgi?id=16240. Sorry, I can not think of a good test case for this one, except by running valgrind as reported in the bug.
llvm-svn: 185273
Diffstat (limited to 'libcxx')
-rw-r--r--libcxx/include/regex26
1 files changed, 25 insertions, 1 deletions
diff --git a/libcxx/include/regex b/libcxx/include/regex
index 52c9178ae3d..02211672077 100644
--- a/libcxx/include/regex
+++ b/libcxx/include/regex
@@ -2843,6 +2843,15 @@ private:
const basic_regex<_Cp, _Tp>& __e,
regex_constants::match_flag_type __flags);
+ template <class _Iter, class _Ap, class _Cp, class _Tp>
+ friend
+ bool
+ regex_search(__wrap_iter<_Iter> __first,
+ __wrap_iter<_Iter> __last,
+ match_results<__wrap_iter<_Iter>, _Ap>& __m,
+ const basic_regex<_Cp, _Tp>& __e,
+ regex_constants::match_flag_type __flags);
+
template <class, class> friend class __lookahead;
};
@@ -5808,6 +5817,21 @@ regex_search(_BidirectionalIterator __first, _BidirectionalIterator __last,
return __r;
}
+template <class _Iter, class _Allocator, class _CharT, class _Traits>
+inline _LIBCPP_INLINE_VISIBILITY
+bool
+regex_search(__wrap_iter<_Iter> __first,
+ __wrap_iter<_Iter> __last,
+ match_results<__wrap_iter<_Iter>, _Allocator>& __m,
+ const basic_regex<_CharT, _Traits>& __e,
+ regex_constants::match_flag_type __flags = regex_constants::match_default)
+{
+ match_results<const _CharT*> __mc;
+ bool __r = __e.__search(__first.base(), __last.base(), __mc, __flags);
+ __m.__assign(__first, __last, __mc, __flags & regex_constants::__no_update_pos);
+ return __r;
+}
+
template <class _Allocator, class _CharT, class _Traits>
inline _LIBCPP_INLINE_VISIBILITY
bool
@@ -6045,7 +6069,7 @@ regex_iterator<_BidirectionalIterator, _CharT, _Traits>::operator++()
{
__flags_ |= regex_constants::__no_update_pos;
_BidirectionalIterator __start = __match_[0].second;
- if (__match_.length() == 0)
+ if (__match_.empty())
{
if (__start == __end_)
{
OpenPOWER on IntegriCloud