Fix a bug in regex_Iterator where it would report zero-length matches forever. Reported as http://llvm.org/PR33681. Thanks to Karen Arutyunov for the report.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@307171 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -6142,7 +6142,7 @@ regex_iterator<_BidirectionalIterator, _CharT, _Traits>::operator++()
|
|||||||
{
|
{
|
||||||
__flags_ |= regex_constants::__no_update_pos;
|
__flags_ |= regex_constants::__no_update_pos;
|
||||||
_BidirectionalIterator __start = __match_[0].second;
|
_BidirectionalIterator __start = __match_[0].second;
|
||||||
if (__match_.empty())
|
if (__match_[0].first == __match_[0].second)
|
||||||
{
|
{
|
||||||
if (__start == __end_)
|
if (__start == __end_)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -95,4 +95,22 @@ int main()
|
|||||||
assert((*i2).position() == 0);
|
assert((*i2).position() == 0);
|
||||||
assert((*i2).str() == "555-1234");
|
assert((*i2).str() == "555-1234");
|
||||||
}
|
}
|
||||||
|
{ // http://llvm.org/PR33681
|
||||||
|
std::regex rex(".*");
|
||||||
|
const char foo[] = "foo";
|
||||||
|
// The -1 is because we don't want the implicit null from the array.
|
||||||
|
std::cregex_iterator i(std::begin(foo), std::end(foo) - 1, rex);
|
||||||
|
std::cregex_iterator e;
|
||||||
|
assert(i != e);
|
||||||
|
assert((*i).size() == 1);
|
||||||
|
assert((*i).str() == "foo");
|
||||||
|
|
||||||
|
++i;
|
||||||
|
assert(i != e);
|
||||||
|
assert((*i).size() == 1);
|
||||||
|
assert((*i).str() == "");
|
||||||
|
|
||||||
|
++i;
|
||||||
|
assert(i == e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user