@@ -718,47 +718,33 @@ module TaintTracking {
718
718
override predicate serializeStep ( DataFlow:: Node pred , DataFlow:: Node succ ) {
719
719
exists ( JsonStringifyCall call , DataFlow:: Node arg |
720
720
arg = call .getArgument ( 0 ) and
721
- (
722
- pred = arg or
723
- findInObject ( arg .asExpr ( ) , pred .asExpr ( ) )
724
- ) and
721
+ findInObject ( arg .asExpr ( ) , pred .asExpr ( ) ) and
725
722
succ = call
726
723
)
727
724
}
728
725
729
726
// find target in root object recursively
730
727
private predicate findInObject ( Expr root , Expr target ) {
728
+ // base case
729
+ root = target
730
+ or
731
731
// when root is Object
732
- exists ( Property property , Expr propertyVal |
732
+ exists ( Property property |
733
733
root instanceof ObjectExpr and
734
734
property = root .( ObjectExpr ) .getAProperty ( ) and
735
- propertyVal = property .getInit ( ) and
736
735
(
737
- target = property .getNameExpr ( ) or
738
- target = propertyVal or
739
- findInObject ( propertyVal , target )
736
+ findInObject ( property .getNameExpr ( ) , target ) or
737
+ findInObject ( property .getInit ( ) , target )
740
738
)
741
739
)
742
740
or
743
741
// when root is Array
744
- exists ( Expr child |
745
- root instanceof ArrayExpr and
746
- child = root .( ArrayExpr ) .getAChildExpr ( ) and
747
- (
748
- target = child or
749
- findInObject ( child , target )
750
- )
751
- )
742
+ root instanceof ArrayExpr and
743
+ findInObject ( root .( ArrayExpr ) .getAChildExpr ( ) , target )
752
744
or
753
745
// when root is VarRef
754
- exists ( Expr var |
755
- root instanceof VarRef and
756
- var = root .( VarRef ) .getAVariable ( ) .getAnAssignedExpr ( ) and
757
- (
758
- target = var or
759
- findInObject ( var , target )
760
- )
761
- )
746
+ root instanceof VarRef and
747
+ findInObject ( root .( VarRef ) .getAVariable ( ) .getAnAssignedExpr ( ) , target )
762
748
}
763
749
}
764
750
0 commit comments