11import java .util .ResourceBundle ;
22import java .util .logging .LogRecord ;
3+ import java .util .regex .Pattern ;
34import com .google .common .flogger .LoggingApi ;
45import org .apache .commons .logging .Log ;
56import org .apache .log4j .Category ;
@@ -19,6 +20,114 @@ public Object source() {
1920 return null ;
2021 }
2122
23+ public void testSanitizers () {
24+ String source = (String ) source ();
25+ Logger logger = null ;
26+ logger .debug (source .replace ("\n " , "" )); // Safe
27+ logger .debug (source .replace ("\n " , "\n " )); // $ hasTaintFlow
28+ logger .debug (source .replace ("\n " , "\r " )); // $ hasTaintFlow
29+ logger .debug (source .replace ("\r " , "" )); // Safe
30+ logger .debug (source .replace ("\r " , "\n " )); // $ hasTaintFlow
31+ logger .debug (source .replace ("\r " , "\r " )); // $ hasTaintFlow
32+ logger .debug (source .replace ("something_else" , "" )); // $ hasTaintFlow
33+ logger .debug (source .replace ('\n' , '_' )); // Safe
34+ logger .debug (source .replace ('\n' , '\n' )); // $ hasTaintFlow
35+ logger .debug (source .replace ('\n' , '\r' )); // $ hasTaintFlow
36+ logger .debug (source .replace ('\r' , '_' )); // Safe
37+ logger .debug (source .replace ('\r' , '\n' )); // $ hasTaintFlow
38+ logger .debug (source .replace ('\r' , '\r' )); // $ hasTaintFlow
39+ logger .debug (source .replace ('-' , '_' )); // $ hasTaintFlow
40+ logger .debug (source .replaceAll ("\n " , "" )); // Safe
41+ logger .debug (source .replaceAll ("\n " , "\n " )); // $ hasTaintFlow
42+ logger .debug (source .replaceAll ("\n " , "\r " )); // $ hasTaintFlow
43+ logger .debug (source .replaceAll ("\r " , "" )); // Safe
44+ logger .debug (source .replaceAll ("\r " , "\n " )); // $ hasTaintFlow
45+ logger .debug (source .replaceAll ("\r " , "\r " )); // $ hasTaintFlow
46+ logger .debug (source .replaceAll ("[^a-zA-Z]" , "" )); // Safe
47+ logger .debug (source .replaceAll ("[^a-zA-Z]" , "\n " )); // $ hasTaintFlow
48+ logger .debug (source .replaceAll ("[^a-zA-Z]" , "\r " )); // $ hasTaintFlow
49+ logger .debug (source .replaceAll ("[^a-zA-Z\n ]" , "" )); // $ hasTaintFlow
50+ logger .debug (source .replaceAll ("[^a-zA-Z\r ]" , "" )); // $ hasTaintFlow
51+ }
52+
53+ public void testGuards () {
54+ String source = (String ) source ();
55+ Logger logger = null ;
56+
57+ if (source .matches (".*\n .*" )) {
58+ logger .debug (source ); // $ hasTaintFlow
59+ } else {
60+ logger .debug (source ); // Safe
61+ }
62+
63+ if (Pattern .matches (".*\n .*" , source )) {
64+ logger .debug (source ); // $ hasTaintFlow
65+ } else {
66+ logger .debug (source ); // Safe
67+ }
68+
69+ if (source .matches (".*\r .*" )) {
70+ logger .debug (source ); // $ hasTaintFlow
71+ } else {
72+ logger .debug (source ); // Safe
73+ }
74+
75+ if (Pattern .matches (".*\r .*" , source )) {
76+ logger .debug (source ); // $ hasTaintFlow
77+ } else {
78+ logger .debug (source ); // Safe
79+ }
80+
81+ if (source .matches (".*" )) {
82+ logger .debug (source ); // Safe (assuming not DOTALL)
83+ } else {
84+ logger .debug (source ); // $ hasTaintFlow
85+ }
86+
87+ if (Pattern .matches (".*" , source )) {
88+ logger .debug (source ); // Safe (assuming not DOTALL)
89+ } else {
90+ logger .debug (source ); // $ hasTaintFlow
91+ }
92+
93+ if (source .matches ("[^\n \r ]*" )) {
94+ logger .debug (source ); // Safe
95+ } else {
96+ logger .debug (source ); // $ hasTaintFlow
97+ }
98+
99+ if (Pattern .matches ("[^\n \r ]*" , source )) {
100+ logger .debug (source ); // Safe
101+ } else {
102+ logger .debug (source ); // $ hasTaintFlow
103+ }
104+
105+ if (source .matches ("[^a-zA-Z]*" )) {
106+ logger .debug (source ); // $ hasTaintFlow
107+ } else {
108+ logger .debug (source ); // $ hasTaintFlow
109+ }
110+
111+ if (Pattern .matches ("[^a-zA-Z]*" , source )) {
112+ logger .debug (source ); // $ hasTaintFlow
113+ } else {
114+ logger .debug (source ); // $ hasTaintFlow
115+ }
116+
117+ if (source .matches ("[\n ]*" )) {
118+ logger .debug (source ); // $ hasTaintFlow
119+ } else {
120+ logger .debug (source ); // $ MISSING: $ hasTaintFlow
121+ }
122+
123+ if (Pattern .matches ("[\n ]*" , source )) {
124+ logger .debug (source ); // $ hasTaintFlow
125+ } else {
126+ logger .debug (source ); // $ MISSING: $ hasTaintFlow
127+ }
128+
129+ }
130+
22131 public void test () {
23132 {
24133 Category category = null ;
0 commit comments