Skip to content

Commit 4ee31bd

Browse files
committed
take2
1 parent b6b6e5a commit 4ee31bd

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

rust/ql/lib/codeql/rust/internal/PathResolution.qll

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,6 @@ abstract class ItemNode extends Locatable {
208208
crateDefEdge(this, name, result, kind)
209209
or
210210
crateDependencyEdge(this, name, result) and
211-
not declaresDirectly(this, TTypeNamespace(), name) and
212211
kind.isInternal()
213212
or
214213
externCrateEdge(this, name, result) and
@@ -1233,17 +1232,23 @@ private class BuiltinSourceFile extends SourceFileItemNode {
12331232
BuiltinSourceFile() { this.getFile().getParentContainer() instanceof Builtins::BuiltinsFolder }
12341233
}
12351234

1235+
pragma[nomagic]
1236+
private predicate crateDependency(SourceFileItemNode file, string name, CrateItemNode dep) {
1237+
exists(CrateItemNode c | dep = c.(Crate).getDependency(name) | file = c.getASourceFile())
1238+
}
1239+
12361240
/**
12371241
* Holds if `file` depends on crate `dep` named `name`.
12381242
*/
12391243
pragma[nomagic]
12401244
private predicate crateDependencyEdge(SourceFileItemNode file, string name, CrateItemNode dep) {
1241-
exists(CrateItemNode c | dep = c.(Crate).getDependency(name) | file = c.getASourceFile())
1245+
crateDependency(file, name, dep)
12421246
or
1243-
// All files _should_ belong to a crate, but for those where we cannot identify the crate,
1244-
// we give access to all crates as a fallback.
1245-
not file = any(Crate c).getASourceFile() and
1246-
name = dep.getName()
1247+
// As a fallback, give all files access to crates that do not conflict with known dependencies
1248+
// and declarations.
1249+
name = dep.getName() and
1250+
not declaresDirectly(file, TTypeNamespace(), name) and
1251+
not crateDependency(file, name, _)
12471252
}
12481253

12491254
private predicate useTreeDeclares(UseTree tree, string name) {

0 commit comments

Comments
 (0)