@@ -168,7 +168,7 @@ predicate sinkHasPrimaryName(API::Node sink, string package, string name) {
168168 *
169169 * This means it is a valid name for it, but was not chosen as the primary name.
170170 */
171- predicate sinkHasAlias ( API:: Node sink , string package , string name ) {
171+ private predicate sinkHasAlias ( API:: Node sink , string package , string name ) {
172172 not sinkHasPrimaryName ( sink , package , name ) and
173173 (
174174 exists ( string baseName , string step |
@@ -239,15 +239,6 @@ predicate classObjectHasPrimaryName(DataFlow::ClassNode cls, string package, str
239239 classObjectHasPrimaryName ( cls , package , name , _)
240240}
241241
242- /** Holds if `(package, name)` is an alias for the class object of `cls`. */
243- predicate classObjectHasAlias ( DataFlow:: ClassNode cls , string package , string name ) {
244- not classObjectHasPrimaryName ( cls , package , name ) and
245- exists ( int badness |
246- classObjectHasNameCandidate ( cls , package , name , badness ) and
247- badness < 100
248- )
249- }
250-
251242/** Holds if an instance of `cls` can be exposed to client code. */
252243private predicate hasEscapingInstance ( DataFlow:: ClassNode cls ) {
253244 cls .getAnInstanceReference ( ) .flowsTo ( any ( API:: Node n ) .asSink ( ) )
@@ -362,14 +353,28 @@ predicate functionHasPrimaryName(DataFlow::FunctionNode function, string package
362353}
363354
364355/**
365- * Holds if `(package, name)` is an alias for the given `function`.
356+ * Holds if `(aliasPackage, aliasName)` is an alias for `(primaryPackage, primaryName)`,
357+ * defined at `aliasDef`.
366358 */
367- predicate functionHasAlias ( DataFlow:: FunctionNode function , string package , string name ) {
368- not functionHasPrimaryName ( function , package , name ) and
369- exists ( int badness |
370- functionHasNameCandidate ( function , package , name , badness ) and
371- badness < 100
359+ predicate aliasDefinition (
360+ string primaryPackage , string primaryName , string aliasPackage , string aliasName ,
361+ API:: Node aliasDef
362+ ) {
363+ exists ( DataFlow:: SourceNode source |
364+ classObjectHasPrimaryName ( source , primaryPackage , primaryName )
365+ or
366+ functionHasPrimaryName ( source , primaryPackage , primaryName )
367+ |
368+ aliasDef .getAValueReachingSink ( ) = source and
369+ sinkHasPrimaryName ( aliasDef , aliasPackage , aliasName , _) and
370+ not (
371+ primaryPackage = aliasPackage and
372+ primaryName = aliasName
373+ )
372374 )
375+ or
376+ sinkHasPrimaryName ( aliasDef , primaryPackage , primaryName ) and
377+ sinkHasAlias ( aliasDef , aliasPackage , aliasName )
373378}
374379
375380/**
0 commit comments