[clangd] Allow --query-driver to match a dot-normalized form of the path (#66757)

(In addition to the un-normalized form, so this is back-compatible)
This commit is contained in:
Sam McCall 2023-09-22 11:09:18 +02:00 committed by GitHub
parent fe7fe6d343
commit 01d3045d12
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -343,7 +343,13 @@ extractSystemIncludesAndTarget(const DriverArgs &InputArgs,
SPAN_ATTACH(Tracer, "driver", Driver);
SPAN_ATTACH(Tracer, "lang", InputArgs.Lang);
if (!QueryDriverRegex.match(Driver)) {
// If driver was "../foo" then having to allowlist "/path/a/../foo" rather
// than "/path/foo" is absurd.
// Allow either to match the allowlist, then proceed with "/path/a/../foo".
// This was our historical behavior, and it *could* resolve to something else.
llvm::SmallString<256> NoDots(Driver);
llvm::sys::path::remove_dots(NoDots, /*remove_dot_dot=*/true);
if (!QueryDriverRegex.match(Driver) && !QueryDriverRegex.match(NoDots)) {
vlog("System include extraction: not allowed driver {0}", Driver);
return std::nullopt;
}