@@ -225,9 +225,11 @@ abstract class Configuration extends string {
225225 }
226226
227227 /**
228- * Holds if the `pred` should be stored in the object `succ` under the property `prop`.
228+ * Holds if the `pred` should be stored in the object `succ` under the property `prop`.
229+ *
230+ * `succ` is a DataFlow::SourceNode, as this is assumed by the `isAdditionalCopyPropertyStep` predicate.
229231 */
230- predicate isAdditionalStoreStep ( DataFlow:: Node pred , DataFlow:: Node succ , string prop ) { none ( ) }
232+ predicate isAdditionalStoreStep ( DataFlow:: Node pred , DataFlow:: SourceNode succ , string prop ) { none ( ) }
231233
232234 /**
233235 * Holds if the property `prop` of the object `pred` should be loaded into `succ`.
@@ -237,7 +239,7 @@ abstract class Configuration extends string {
237239 /**
238240 * Holds if the property `prop` should be copied from the object `pred` to the object `succ`.
239241 */
240- predicate isAdditionalCopyPropertyStep ( DataFlow:: Node pred , DataFlow:: Node succ , string prop ) { none ( ) }
242+ predicate isAdditionalCopyPropertyStep ( DataFlow:: Node pred , DataFlow:: SourceNode succ , string prop ) { none ( ) }
241243}
242244
243245/**
@@ -468,9 +470,11 @@ abstract class AdditionalFlowStep extends DataFlow::Node {
468470
469471 /**
470472 * Holds if the `pred` should be stored in the object `succ` under the property `prop`.
473+ *
474+ * `succ` is a DataFlow::SourceNode, as this is assumed by the `copyProperty` predicate.
471475 */
472476 cached
473- predicate store ( DataFlow:: Node pred , DataFlow:: Node succ , string prop ) { none ( ) }
477+ predicate store ( DataFlow:: Node pred , DataFlow:: SourceNode succ , string prop ) { none ( ) }
474478
475479 /**
476480 * Holds if the property `prop` of the object `pred` should be loaded into `succ`.
@@ -482,7 +486,7 @@ abstract class AdditionalFlowStep extends DataFlow::Node {
482486 * Holds if the property `prop` should be copied from the object `pred` to the object `succ`.
483487 */
484488 cached
485- predicate copyProperty ( DataFlow:: Node pred , DataFlow:: Node succ , string prop ) { none ( ) }
489+ predicate copyProperty ( DataFlow:: Node pred , DataFlow:: SourceNode succ , string prop ) { none ( ) }
486490}
487491
488492/**
@@ -808,26 +812,25 @@ private predicate reachesReturn(
808812}
809813
810814private predicate isAdditionalLoadStep ( DataFlow:: Node pred , DataFlow:: Node succ , string prop , DataFlow:: Configuration cfg ) {
811- exists ( DataFlow:: Node obj | pred = obj .getALocalSource ( ) or pred = obj |
812- any ( AdditionalFlowStep s ) .load ( obj , succ , prop )
813- or
814- cfg .isAdditionalLoadStep ( obj , succ , prop )
815- )
815+ any ( AdditionalFlowStep s ) .load ( pred , succ , prop )
816+ or
817+ cfg .isAdditionalLoadStep ( pred , succ , prop )
816818}
817819
818- private predicate isAdditionalStoreStep ( DataFlow:: Node pred , DataFlow:: Node succ , string prop , DataFlow:: Configuration cfg ) {
819- exists ( DataFlow:: Node obj | pred = obj .getALocalSource ( ) or pred = obj |
820- any ( AdditionalFlowStep s ) .store ( obj , succ , prop )
821- or
822- cfg .isAdditionalStoreStep ( obj , succ , prop )
823- )
820+ private predicate isAdditionalStoreStep ( DataFlow:: Node pred , DataFlow:: SourceNode succ , string prop , DataFlow:: Configuration cfg ) {
821+ any ( AdditionalFlowStep s ) .store ( pred , succ , prop )
822+ or
823+ cfg .isAdditionalStoreStep ( pred , succ , prop )
824824}
825825
826- private predicate isAdditionalCopyPropertyStep ( DataFlow:: Node pred , DataFlow:: Node succ , string prop , DataFlow:: Configuration cfg ) {
827- exists ( DataFlow:: Node obj | pred = obj .getALocalSource ( ) or pred = obj |
828- any ( AdditionalFlowStep s ) .copyProperty ( obj , succ , prop )
826+ private predicate isAdditionalCopyPropertyStep ( DataFlow:: SourceNode pred , DataFlow:: Node succ , string prop , DataFlow:: Configuration cfg ) {
827+ exists ( DataFlow:: Node predNode , DataFlow:: SourceNode succNode |
828+ pred = predNode .getALocalSource ( ) and
829+ succ .getALocalSource ( ) = succNode
830+ |
831+ any ( AdditionalFlowStep s ) .copyProperty ( predNode , succNode , prop )
829832 or
830- cfg .isAdditionalCopyPropertyStep ( obj , succ , prop )
833+ cfg .isAdditionalCopyPropertyStep ( predNode , succNode , prop )
831834 )
832835}
833836
0 commit comments