1+ import org .apache .commons .lang3 .RegExUtils ;
2+ import java .util .regex .Pattern ;
3+
4+ public class RegExUtilsTest {
5+ String taint () { return "tainted" ; }
6+
7+ void sink (Object o ) {}
8+
9+ void test () throws Exception {
10+ Pattern cleanPattern = Pattern .compile ("clean" );
11+ Pattern taintedPattern = Pattern .compile (taint ());
12+
13+ sink (RegExUtils .removeAll (taint (), cleanPattern )); // $hasTaintFlow
14+ sink (RegExUtils .removeAll (taint (), "clean" )); // $hasTaintFlow
15+ sink (RegExUtils .removeFirst (taint (), cleanPattern )); // $hasTaintFlow
16+ sink (RegExUtils .removeFirst (taint (), "clean" )); // $hasTaintFlow
17+ sink (RegExUtils .removePattern (taint (), "clean" )); // $hasTaintFlow
18+ sink (RegExUtils .replaceAll (taint (), cleanPattern , "replacement" )); // $hasTaintFlow
19+ sink (RegExUtils .replaceAll (taint (), "clean" , "replacement" )); // $hasTaintFlow
20+ sink (RegExUtils .replaceFirst (taint (), cleanPattern , "replacement" )); // $hasTaintFlow
21+ sink (RegExUtils .replaceFirst (taint (), "clean" , "replacement" )); // $hasTaintFlow
22+ sink (RegExUtils .replacePattern (taint (), "clean" , "replacement" )); // $hasTaintFlow
23+ sink (RegExUtils .replaceAll ("original" , cleanPattern , taint ())); // $hasTaintFlow
24+ sink (RegExUtils .replaceAll ("original" , "clean" , taint ())); // $hasTaintFlow
25+ sink (RegExUtils .replaceFirst ("original" , cleanPattern , taint ())); // $hasTaintFlow
26+ sink (RegExUtils .replaceFirst ("original" , "clean" , taint ())); // $hasTaintFlow
27+ sink (RegExUtils .replacePattern ("original" , "clean" , taint ())); // $hasTaintFlow
28+ // Subsequent calls don't propagate taint, as regex search patterns don't propagate to the return value.
29+ sink (RegExUtils .removeAll ("original" , taintedPattern ));
30+ sink (RegExUtils .removeAll ("original" , taint ()));
31+ sink (RegExUtils .removeFirst ("original" , taintedPattern ));
32+ sink (RegExUtils .removeFirst ("original" , taint ()));
33+ sink (RegExUtils .removePattern ("original" , taint ()));
34+ sink (RegExUtils .replaceAll ("original" , taintedPattern , "replacement" ));
35+ sink (RegExUtils .replaceAll ("original" , taint (), "replacement" ));
36+ sink (RegExUtils .replaceFirst ("original" , taintedPattern , "replacement" ));
37+ sink (RegExUtils .replaceFirst ("original" , taint (), "replacement" ));
38+ sink (RegExUtils .replacePattern ("original" , taint (), "replacement" ));
39+ sink (RegExUtils .replaceAll ("original" , taintedPattern , "replacement" ));
40+ sink (RegExUtils .replaceAll ("original" , taint (), "replacement" ));
41+ sink (RegExUtils .replaceFirst ("original" , taintedPattern , "replacement" ));
42+ sink (RegExUtils .replaceFirst ("original" , taint (), "replacement" ));
43+ sink (RegExUtils .replacePattern ("original" , taint (), "replacement" ));
44+ }
45+ }
0 commit comments