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=y
14
+ sink (RegExUtils .removeAll (taint (), "clean" )); // $hasTaintFlow=y
15
+ sink (RegExUtils .removeFirst (taint (), cleanPattern )); // $hasTaintFlow=y
16
+ sink (RegExUtils .removeFirst (taint (), "clean" )); // $hasTaintFlow=y
17
+ sink (RegExUtils .removePattern (taint (), "clean" )); // $hasTaintFlow=y
18
+ sink (RegExUtils .replaceAll (taint (), cleanPattern , "replacement" )); // $hasTaintFlow=y
19
+ sink (RegExUtils .replaceAll (taint (), "clean" , "replacement" )); // $hasTaintFlow=y
20
+ sink (RegExUtils .replaceFirst (taint (), cleanPattern , "replacement" )); // $hasTaintFlow=y
21
+ sink (RegExUtils .replaceFirst (taint (), "clean" , "replacement" )); // $hasTaintFlow=y
22
+ sink (RegExUtils .replacePattern (taint (), "clean" , "replacement" )); // $hasTaintFlow=y
23
+ sink (RegExUtils .replaceAll ("original" , cleanPattern , taint ())); // $hasTaintFlow=y
24
+ sink (RegExUtils .replaceAll ("original" , "clean" , taint ())); // $hasTaintFlow=y
25
+ sink (RegExUtils .replaceFirst ("original" , cleanPattern , taint ())); // $hasTaintFlow=y
26
+ sink (RegExUtils .replaceFirst ("original" , "clean" , taint ())); // $hasTaintFlow=y
27
+ sink (RegExUtils .replacePattern ("original" , "clean" , taint ())); // $hasTaintFlow=y
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