Skip to content

Commit 7f6c0f4

Browse files
committed
JS: Allow isTypeUsed overrides to be global
1 parent 6ddb9c7 commit 7f6c0f4

File tree

3 files changed

+24
-9
lines changed

3 files changed

+24
-9
lines changed

javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowNode.qll

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,14 @@ private module Cached {
111111
none() and
112112
// We want to prune irrelevant models before materialising data flow nodes, so types contributed
113113
// directly from CodeQL must expose their pruning info without depending on data flow nodes.
114-
(any(ModelInput::TypeModel tm).isTypeUsed("") implies any())
114+
(isTypeUsedLocal() implies any())
115115
}
116116

117+
overlay[global]
118+
private predicate isTypeUsedGlobal() { any(ModelInput::TypeModel tm).isTypeUsed("") }
119+
120+
private predicate isTypeUsedLocal() = forceLocal(isTypeUsedGlobal/0)()
121+
117122
cached
118123
private module Backref {
119124
cached

javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -393,20 +393,31 @@ predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) {
393393
)
394394
}
395395

396+
pragma[nomagic]
397+
private predicate isTypeMentionedInModel(string type) {
398+
sourceModel(type, _, _, _) or
399+
sinkModel(type, _, _, _) or
400+
summaryModel(type, _, _, _, _, _) or
401+
typeModel(_, type, _)
402+
}
403+
404+
overlay[global]
405+
private predicate isTypeUsedGlobal(string type) {
406+
isTypeMentionedInModel(type) and any(TypeModel tm).isTypeUsed(type)
407+
}
408+
409+
overlay[local]
410+
private predicate isTypeUsedLocal(string type) = forceLocal(isTypeUsedGlobal/1)(type)
411+
396412
/**
397413
* Holds if rows involving `type` might be relevant for the analysis of this database.
398414
*/
399415
predicate isRelevantType(string type) {
400-
(
401-
sourceModel(type, _, _, _) or
402-
sinkModel(type, _, _, _) or
403-
summaryModel(type, _, _, _, _, _) or
404-
typeModel(_, type, _)
405-
) and
416+
isTypeMentionedInModel(type) and
406417
(
407418
Specific::isTypeUsed(type)
408419
or
409-
any(TypeModel model).isTypeUsed(type)
420+
isTypeUsedLocal(type)
410421
or
411422
exists(TestAllModels t)
412423
)

javascript/ql/test/library-tests/frameworks/data/test.ql

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import javascript
22
deprecated import utils.test.ConsistencyChecking
33
import semmle.javascript.frameworks.data.internal.ApiGraphModels as ApiGraphModels
44

5-
overlay[local]
65
class TypeModelFromCodeQL extends ModelInput::TypeModel {
76
override predicate isTypeUsed(string type) { type = "danger-constant" }
87

0 commit comments

Comments
 (0)