From daf04f1184f5b79ca1f8cf516aec13e44ec63635 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 28 Nov 2025 10:15:58 +0100 Subject: [PATCH] JS: Call forceLocal on the output of Stage 1 --- .../ql/lib/semmle/javascript/ApiGraphs.qll | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index 0dca3c1dd8e..488fddc95de 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -1539,6 +1539,25 @@ module API { private module Stage1 = Stage; + overlay[local] + private module Stage1Local { + predicate use(TApiNode node, DataFlow::Node ref) = forceLocal(Stage1::use/2)(node, ref) + + predicate rhs(TApiNode node, DataFlow::Node def) = forceLocal(Stage1::rhs/2)(node, def) + + DataFlow::SourceNode trackUseNode(DataFlow::SourceNode nd) = + forceLocal(Stage1::trackUseNode/1)(nd, result) + + DataFlow::SourceNode trackDefNode(DataFlow::SourceNode nd) = + forceLocal(Stage1::trackDefNode/1)(nd, result) + + predicate edge(TApiNode pred, Label::ApiLabel lbl, TApiNode succ) = + forceLocal(Stage1::edge/3)(pred, lbl, succ) + + DataFlow::InvokeNode getAPromisifiedInvocation(TApiNode callee, int bound, TApiNode succ) = + forceLocal(Stage1::getAPromisifiedInvocation/3)(callee, bound, succ, result) + } + cached private module Cached { cached