@@ -604,12 +604,36 @@ module API {
604604 or
605605 lbl = Label:: promisedError ( ) and
606606 PromiseFlow:: storeStep ( rhs , pred , Promises:: errorProp ( ) )
607+ or
608+ // The return-value of a getter G counts as a definition of property G
609+ // (Ordinary methods and properties are handled as PropWrite nodes)
610+ exists ( string name | lbl = Label:: member ( name ) |
611+ rhs = pred .( DataFlow:: ObjectLiteralNode ) .getPropertyGetter ( name ) .getAReturn ( )
612+ or
613+ rhs =
614+ pred .( DataFlow:: ClassNode )
615+ .getStaticMember ( name , DataFlow:: MemberKind:: getter ( ) )
616+ .getAReturn ( )
617+ )
618+ or
619+ // If `new C()` escapes, generate edges to its instance members
620+ exists ( DataFlow:: ClassNode cls , string name |
621+ pred = cls .getAClassReference ( ) .getAnInstantiation ( ) and
622+ lbl = Label:: member ( name )
623+ |
624+ rhs = cls .getInstanceMethod ( name )
625+ or
626+ rhs = cls .getInstanceMember ( name , DataFlow:: MemberKind:: getter ( ) ) .getAReturn ( )
627+ )
607628 )
608629 or
609630 exists ( DataFlow:: ClassNode cls , string name |
610631 base = MkClassInstance ( cls ) and
611- lbl = Label:: member ( name ) and
632+ lbl = Label:: member ( name )
633+ |
612634 rhs = cls .getInstanceMethod ( name )
635+ or
636+ rhs = cls .getInstanceMember ( name , DataFlow:: MemberKind:: getter ( ) ) .getAReturn ( )
613637 )
614638 or
615639 exists ( DataFlow:: FunctionNode f |
0 commit comments