[Bug 243881] libc++: regex uses truncated pattern if normal character is escaped
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Tue Feb 4 18:53:13 UTC 2020
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=243881
Bug ID: 243881
Summary: libc++: regex uses truncated pattern if normal
character is escaped
Product: Base System
Version: 12.1-RELEASE
Hardware: amd64
OS: Any
Status: New
Severity: Affects Only Me
Priority: ---
Component: bin
Assignee: bugs at FreeBSD.org
Reporter: mail at maxlor.com
If a pattern in which a normal character is escaped (e.g.: "a\bc"), the libc++
that ships with FreeBSD only appears to use the part of the pattern up to that
character.
Test program:
===== regextest.cpp BEGIN =====
#include <iostream>
#include <regex>
#include <vector>
using namespace std;
int main() {
vector<string> patterns = {
R"(abc)",
R"(a\bc)",
R"(a\bx)",
R"(a\xc)",
R"(x\bc)",
};
for (const string &pattern : patterns) {
cout << pattern << ": ";
try {
regex r(pattern, regex::extended);
bool match = regex_search("abc", r);
cout << (match ? "match" : "no match") << endl;
} catch (const std::regex_error &e) {
cout << "regex error: " << e.what() << endl;
}
}
return 0;
}
===== regextest.cpp END =====
expected output:
abc: match
a\bc: match
a\bx: no match
a\xc: no match
x\bc: no match
Incorrect output on FreeBSD 12.1 with system c++ compiler (clang 8.0.1):
abc: match
a\bc: match
a\bx: match
a\xc: match
x\bc: no match
On FreeBSD, gcc9 works correctly, so does clang-8 on Ubuntu, which makes me
think this is specific to the FreeBSD system compiler.
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list