Fix Bug 19678 - libc++ does not correctly handle the regex: '[^\0]*'

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@209307 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Marshall Clow 2014-05-21 16:29:50 +00:00
parent 117563c516
commit 6b7e6921e2
2 changed files with 19 additions and 0 deletions

View File

@ -4541,6 +4541,13 @@ basic_regex<_CharT, _Traits>::__parse_character_escape(_ForwardIterator __first,
__push_char(_CharT(__sum)); __push_char(_CharT(__sum));
++__first; ++__first;
break; break;
case '0':
if (__str)
*__str = _CharT(0);
else
__push_char(_CharT(0));
++__first;
break;
default: default:
if (*__first != '_' && !__traits_.isctype(*__first, ctype_base::alnum)) if (*__first != '_' && !__traits_.isctype(*__first, ctype_base::alnum))
{ {

View File

@ -608,6 +608,18 @@ int main()
assert(m.position(0) == 0); assert(m.position(0) == 0);
assert(m.str(0) == s); assert(m.str(0) == s);
} }
{
std::cmatch m;
const char s[] = "foobar";
assert(std::regex_match(s, m, std::regex("[^\\0]*")));
assert(m.size() == 1);
}
{
std::cmatch m;
const char s[] = "foo\0bar";
assert(std::regex_match(s, s+7, m, std::regex("[abfor\\0]*")));
assert(m.size() == 1);
}
std::locale::global(std::locale("C")); std::locale::global(std::locale("C"));
{ {
std::cmatch m; std::cmatch m;