C++: Add location tests for all literal prefixes (pre-fix)

This commit is contained in:
copilot-swe-agent[bot]
2026-07-23 10:01:18 +00:00
committed by GitHub
parent b91b83381b
commit 7b2ce2484f
5 changed files with 84 additions and 3 deletions

View File

@@ -0,0 +1,5 @@
import semmle.code.cpp.regex.RegexTreeView
from RegExpTerm t, string file, int sl, int sc, int el, int ec
where t.isRootTerm() and t.hasLocationInfo(file, sl, sc, el, ec)
select t, file, sl, sc, el, ec

View File

@@ -485,3 +485,36 @@ regexp.cpp:
# 88| [RegExpNamedCharacterProperty] [:digit:]
# 91| [RegExpConstant, RegExpEscape] \u{987
# 94| [RegExpConstant, RegExpNormalChar] a
# 94| [RegExpSequence] a\nb
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpConstant, RegExpEscape] \n
#-----| 2 -> [RegExpConstant, RegExpNormalChar] b
# 94| [RegExpConstant, RegExpEscape] \n
# 94| [RegExpConstant, RegExpNormalChar] b
# 95| [RegExpConstant, RegExpNormalChar] abc
# 96| [RegExpConstant, RegExpNormalChar] abc
# 97| [RegExpConstant, RegExpNormalChar] abc
# 98| [RegExpConstant, RegExpNormalChar] abc
# 99| [RegExpConstant, RegExpNormalChar] abc
# 100| [RegExpConstant, RegExpNormalChar] abc
# 101| [RegExpConstant, RegExpNormalChar] abc
# 102| [RegExpConstant, RegExpNormalChar] abc
# 103| [RegExpConstant, RegExpNormalChar] abc
# 104| [RegExpConstant, RegExpNormalChar] abc
# 105| [RegExpConstant, RegExpNormalChar] abc

View File

@@ -4,9 +4,9 @@ namespace std {
template <class CharT>
class basic_regex {
public:
basic_regex(const char *s) {}
basic_regex(const char *s, int flags) {}
basic_regex &assign(const char *s) { return *this; }
basic_regex(const CharT *s) {}
basic_regex(const CharT *s, int flags) {}
basic_regex &assign(const CharT *s) { return *this; }
};
typedef basic_regex<char> regex;
} // namespace std
@@ -89,3 +89,17 @@ std::regex r_posix4("[:digit:]");
// unicode
std::regex r_uni("\\u{9879}");
// String literal spellings for location tests
std::regex r_loc_plain("a\\nb");
std::basic_regex<wchar_t> r_loc_L(L"abc");
std::basic_regex<char> r_loc_u8(u8"abc");
std::basic_regex<char16_t> r_loc_u(u"abc");
std::basic_regex<char32_t> r_loc_U(U"abc");
std::regex r_loc_R(R"(abc)");
std::basic_regex<wchar_t> r_loc_LR(LR"(abc)");
std::basic_regex<char> r_loc_u8R(u8R"(abc)");
std::basic_regex<char16_t> r_loc_uR(uR"(abc)");
std::basic_regex<char32_t> r_loc_UR(UR"(abc)");
std::regex r_loc_Rx(R"x(abc)x");
std::regex r_loc_Rfoo(R"foo(abc)foo");

View File

@@ -186,6 +186,21 @@ term
| regexp.cpp:85:37:85:37 | f | RegExpConstant,RegExpNormalChar |
| regexp.cpp:88:22:88:30 | [:digit:] | RegExpNamedCharacterProperty |
| regexp.cpp:91:19:91:24 | \\u{987 | RegExpConstant,RegExpEscape |
| regexp.cpp:94:25:94:25 | a | RegExpConstant,RegExpNormalChar |
| regexp.cpp:94:25:94:28 | a\\nb | RegExpSequence |
| regexp.cpp:94:26:94:27 | \\n | RegExpConstant,RegExpEscape |
| regexp.cpp:94:28:94:28 | b | RegExpConstant,RegExpNormalChar |
| regexp.cpp:95:36:95:38 | abc | RegExpConstant,RegExpNormalChar |
| regexp.cpp:96:34:96:36 | abc | RegExpConstant,RegExpNormalChar |
| regexp.cpp:97:37:97:39 | abc | RegExpConstant,RegExpNormalChar |
| regexp.cpp:98:37:98:39 | abc | RegExpConstant,RegExpNormalChar |
| regexp.cpp:99:21:99:23 | abc | RegExpConstant,RegExpNormalChar |
| regexp.cpp:100:37:100:39 | abc | RegExpConstant,RegExpNormalChar |
| regexp.cpp:101:35:101:37 | abc | RegExpConstant,RegExpNormalChar |
| regexp.cpp:102:38:102:40 | abc | RegExpConstant,RegExpNormalChar |
| regexp.cpp:103:38:103:40 | abc | RegExpConstant,RegExpNormalChar |
| regexp.cpp:104:22:104:24 | abc | RegExpConstant,RegExpNormalChar |
| regexp.cpp:105:24:105:26 | abc | RegExpConstant,RegExpNormalChar |
regExpNormalCharValue
| regexp.cpp:18:19:18:21 | abc | abc |
| regexp.cpp:21:20:21:20 | a | a |
@@ -266,3 +281,17 @@ regExpNormalCharValue
| regexp.cpp:85:35:85:35 | a | a |
| regexp.cpp:85:37:85:37 | f | f |
| regexp.cpp:91:19:91:24 | \\u{987 | \u0987 |
| regexp.cpp:94:25:94:25 | a | a |
| regexp.cpp:94:26:94:27 | \\n | \n |
| regexp.cpp:94:28:94:28 | b | b |
| regexp.cpp:95:36:95:38 | abc | abc |
| regexp.cpp:96:34:96:36 | abc | abc |
| regexp.cpp:97:37:97:39 | abc | abc |
| regexp.cpp:98:37:98:39 | abc | abc |
| regexp.cpp:99:21:99:23 | abc | abc |
| regexp.cpp:100:37:100:39 | abc | abc |
| regexp.cpp:101:35:101:37 | abc | abc |
| regexp.cpp:102:38:102:40 | abc | abc |
| regexp.cpp:103:38:103:40 | abc | abc |
| regexp.cpp:104:22:104:24 | abc | abc |
| regexp.cpp:105:24:105:26 | abc | abc |