Skip to content

Commit 7a9b780

Browse files
committed
JS: Make API nodes and labels local
1 parent ba73337 commit 7a9b780

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

javascript/ql/lib/semmle/javascript/ApiGraphs.qll

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,7 @@ module API {
743743
private predicate hasTypeUseLocal(string moduleName, string exportName) =
744744
forceLocal(hasTypeUse/2)(moduleName, exportName)
745745

746+
overlay[local]
746747
cached
747748
newtype TApiNode =
748749
MkRoot() or
@@ -1615,6 +1616,7 @@ module API {
16151616
class NewNode extends InvokeNode, DataFlow::NewNode { }
16161617

16171618
/** Provides classes modeling the various edges (labels) in the API graph. */
1619+
overlay[local]
16181620
module Label {
16191621
/** A label in the API-graph */
16201622
class ApiLabel extends TLabel {
@@ -1653,6 +1655,7 @@ module API {
16531655
* This is to support code patterns where the property name is actually constant,
16541656
* but the property name has been factored into a library.
16551657
*/
1658+
overlay[global]
16561659
private string getAnIndirectPropName(DataFlow::PropRef ref) {
16571660
exists(DataFlow::Node pred |
16581661
FlowSteps::propertyFlowStep(pred, ref.getPropertyNameExpr().flow()) and
@@ -1663,16 +1666,19 @@ module API {
16631666
/**
16641667
* Gets unique result of `getAnIndirectPropName` if there is one.
16651668
*/
1669+
overlay[global]
16661670
private string getIndirectPropName(DataFlow::PropRef ref) {
16671671
result = unique(string s | s = getAnIndirectPropName(ref))
16681672
}
16691673

1674+
overlay[global]
16701675
pragma[nomagic]
16711676
private predicate isEnumeratedPropName(DataFlow::Node node) {
16721677
node.getAPredecessor*() instanceof EnumeratedPropName
16731678
}
16741679

16751680
/** Gets the `member` edge label for the given property reference. */
1681+
overlay[global]
16761682
ApiLabel memberFromRef(DataFlow::PropRef pr) {
16771683
exists(string pn | pn = pr.getPropertyName() or pn = getIndirectPropName(pr) |
16781684
result = member(pn) and
@@ -1739,9 +1745,17 @@ module API {
17391745
MkLabelInstance() or
17401746
MkLabelContent(DataFlow::Content content) or
17411747
MkLabelMember(string name) {
1742-
name instanceof PropertyName
1748+
name instanceof ContentPrivate::PropertyName
1749+
or
1750+
name = any(DataFlow::PropRef pr).getPropertyName()
1751+
or
1752+
AccessPath::isAssignedInUniqueFile(name)
1753+
or
1754+
exists(AccessPath::getAnAssignmentTo(_, name))
1755+
or
1756+
name = DataFlow::PseudoProperties::arrayLikeElement()
17431757
or
1744-
exists(Impl::MkTypeUse(_, name))
1758+
name = any(TypeAccess t).getIdentifier().getName()
17451759
} or
17461760
MkLabelParameter(int i) {
17471761
i =

0 commit comments

Comments
 (0)