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: [email protected]
Reporter: [email protected]
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.
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"