@@ -187,12 +187,9 @@ DataFlow::SourceNode nodeReachingSink(API::Node sink) {
187187private API:: Node getASinkNode ( DataFlow:: SourceNode node ) { node = nodeReachingSink ( result ) }
188188
189189/**
190- * Holds if `node` is a declaration in an externs file.
191- *
192- * This is to ensure that functions/classes in externs are not named after a re-export in a package.
190+ * Holds if `node` is assigned to a global access path. Note that such nodes generally do not have API nodes.
193191 */
194- private predicate nameFromExterns ( DataFlow:: Node node , string package , string name , int badness ) {
195- node .getTopLevel ( ) .isExterns ( ) and
192+ private predicate nameFromGlobal ( DataFlow:: Node node , string package , string name , int badness ) {
196193 package = "global" and
197194 node = AccessPath:: getAnAssignmentTo ( name ) and
198195 badness = - 10
@@ -224,7 +221,7 @@ private predicate classObjectHasNameCandidate(
224221 badness = baseBadness + getBadnessOfClassName ( name )
225222 )
226223 or
227- nameFromExterns ( cls , package , name , badness )
224+ nameFromGlobal ( cls , package , name , badness )
228225 or
229226 // If the class is not accessible via an access path, but instances of the
230227 // class can still escape via more complex access patterns, resort to a synthesized name.
@@ -252,7 +249,7 @@ private predicate sourceNodeHasNameCandidate(
252249) {
253250 sinkHasPrimaryName ( getASinkNode ( node ) , package , name , badness )
254251 or
255- nameFromExterns ( node , package , name , badness )
252+ nameFromGlobal ( node , package , name , badness )
256253 or
257254 classObjectHasNameCandidate ( node , package , name , badness )
258255}
@@ -290,7 +287,11 @@ private DataFlow::SourceNode functionValue() {
290287 * Holds if `node` is a function or a call that returns a function.
291288 */
292289private predicate isFunctionSource ( DataFlow:: SourceNode node ) {
293- exists ( getASinkNode ( node ) ) and
290+ (
291+ exists ( getASinkNode ( node ) )
292+ or
293+ nameFromGlobal ( node , _, _, _)
294+ ) and
294295 (
295296 node instanceof DataFlow:: FunctionNode
296297 or
0 commit comments