From 6a63f5b67765fcd5dca403b8ce9b015dd5b0803c Mon Sep 17 00:00:00 2001 From: Asger Feldthaus Date: Thu, 30 Apr 2020 11:34:41 +0100 Subject: [PATCH] JS: Avoid bad join order in ImplicitProcessImport --- .../javascript/frameworks/NodeJSLib.qll | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/javascript/ql/src/semmle/javascript/frameworks/NodeJSLib.qll b/javascript/ql/src/semmle/javascript/frameworks/NodeJSLib.qll index aa1c925d686..588d9b7c18e 100644 --- a/javascript/ql/src/semmle/javascript/frameworks/NodeJSLib.qll +++ b/javascript/ql/src/semmle/javascript/frameworks/NodeJSLib.qll @@ -7,17 +7,28 @@ import semmle.javascript.frameworks.HTTP import semmle.javascript.security.SensitiveActions module NodeJSLib { + private GlobalVariable processVariable() { + variables(result, "process", any(GlobalScope sc)) + } + + pragma[nomagic] + private GlobalVarAccess processExprInTopLevel(TopLevel tl) { + result = processVariable().getAnAccess() and + tl = result.getTopLevel() + } + + pragma[nomagic] + private GlobalVarAccess processExprInNodeModule() { + result = processExprInTopLevel(any(NodeModule m)) + } + /** * An access to the global `process` variable in a Node.js module, interpreted as * an import of the `process` module. */ private class ImplicitProcessImport extends DataFlow::ModuleImportNode::Range { ImplicitProcessImport() { - exists(GlobalVariable process | - process.getName() = "process" and - this = DataFlow::exprNode(process.getAnAccess()) - ) and - getTopLevel() instanceof NodeModule + this = DataFlow::exprNode(processExprInNodeModule()) } override string getPath() { result = "process" }