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,172 @@ 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 ("\\ n" , "" )); // Safe
47+ logger .debug (source .replaceAll ("\\ n" , "\n " )); // $ hasTaintFlow
48+ logger .debug (source .replaceAll ("\\ n" , "\r " )); // $ hasTaintFlow
49+ logger .debug (source .replaceAll ("\\ r" , "" )); // Safe
50+ logger .debug (source .replaceAll ("\\ r" , "\n " )); // $ hasTaintFlow
51+ logger .debug (source .replaceAll ("\\ r" , "\r " )); // $ hasTaintFlow
52+ logger .debug (source .replaceAll ("\\ R" , "" )); // Safe
53+ logger .debug (source .replaceAll ("\\ R" , "\n " )); // $ hasTaintFlow
54+ logger .debug (source .replaceAll ("\\ R" , "\r " )); // $ hasTaintFlow
55+ logger .debug (source .replaceAll ("[^a-zA-Z]" , "" )); // Safe
56+ logger .debug (source .replaceAll ("[^a-zA-Z]" , "\n " )); // $ hasTaintFlow
57+ logger .debug (source .replaceAll ("[^a-zA-Z]" , "\r " )); // $ hasTaintFlow
58+ logger .debug (source .replaceAll ("[^a-zA-Z\n ]" , "" )); // $ hasTaintFlow
59+ logger .debug (source .replaceAll ("[^a-zA-Z\r ]" , "" )); // $ hasTaintFlow
60+ logger .debug (source .replaceAll ("[^a-zA-Z\\ R]" , "" )); // $ hasTaintFlow
61+ }
62+
63+ public void testGuards () {
64+ String source = (String ) source ();
65+ Logger logger = null ;
66+
67+ if (source .matches (".*\n .*" )) {
68+ logger .debug (source ); // $ hasTaintFlow
69+ } else {
70+ logger .debug (source ); // Safe
71+ }
72+
73+ if (Pattern .matches (".*\n .*" , source )) {
74+ logger .debug (source ); // $ hasTaintFlow
75+ } else {
76+ logger .debug (source ); // Safe
77+ }
78+
79+ if (source .matches (".*\\ n.*" )) {
80+ logger .debug (source ); // $ hasTaintFlow
81+ } else {
82+ logger .debug (source ); // Safe
83+ }
84+
85+ if (Pattern .matches (".*\\ n.*" , source )) {
86+ logger .debug (source ); // $ hasTaintFlow
87+ } else {
88+ logger .debug (source ); // Safe
89+ }
90+
91+ if (source .matches (".*\r .*" )) {
92+ logger .debug (source ); // $ hasTaintFlow
93+ } else {
94+ logger .debug (source ); // Safe
95+ }
96+
97+ if (Pattern .matches (".*\r .*" , source )) {
98+ logger .debug (source ); // $ hasTaintFlow
99+ } else {
100+ logger .debug (source ); // Safe
101+ }
102+
103+ if (source .matches (".*\\ r.*" )) {
104+ logger .debug (source ); // $ hasTaintFlow
105+ } else {
106+ logger .debug (source ); // Safe
107+ }
108+
109+ if (Pattern .matches (".*\\ r.*" , source )) {
110+ logger .debug (source ); // $ hasTaintFlow
111+ } else {
112+ logger .debug (source ); // Safe
113+ }
114+
115+ if (source .matches (".*\\ R.*" )) {
116+ logger .debug (source ); // $ hasTaintFlow
117+ } else {
118+ logger .debug (source ); // Safe
119+ }
120+
121+ if (Pattern .matches (".*\\ R.*" , source )) {
122+ logger .debug (source ); // $ hasTaintFlow
123+ } else {
124+ logger .debug (source ); // Safe
125+ }
126+
127+ if (source .matches (".*" )) {
128+ logger .debug (source ); // Safe (assuming not DOTALL)
129+ } else {
130+ logger .debug (source ); // $ hasTaintFlow
131+ }
132+
133+ if (Pattern .matches (".*" , source )) {
134+ logger .debug (source ); // Safe (assuming not DOTALL)
135+ } else {
136+ logger .debug (source ); // $ hasTaintFlow
137+ }
138+
139+ if (source .matches ("[^\n \r ]*" )) {
140+ logger .debug (source ); // Safe
141+ } else {
142+ logger .debug (source ); // $ hasTaintFlow
143+ }
144+
145+ if (Pattern .matches ("[^\n \r ]*" , source )) {
146+ logger .debug (source ); // Safe
147+ } else {
148+ logger .debug (source ); // $ hasTaintFlow
149+ }
150+
151+ if (source .matches ("[^\\ R]*" )) {
152+ logger .debug (source ); // Safe
153+ } else {
154+ logger .debug (source ); // $ hasTaintFlow
155+ }
156+
157+ if (Pattern .matches ("[^\\ R]*" , source )) {
158+ logger .debug (source ); // Safe
159+ } else {
160+ logger .debug (source ); // $ hasTaintFlow
161+ }
162+
163+ if (source .matches ("[^a-zA-Z]*" )) {
164+ logger .debug (source ); // $ hasTaintFlow
165+ } else {
166+ logger .debug (source ); // $ hasTaintFlow
167+ }
168+
169+ if (Pattern .matches ("[^a-zA-Z]*" , source )) {
170+ logger .debug (source ); // $ hasTaintFlow
171+ } else {
172+ logger .debug (source ); // $ hasTaintFlow
173+ }
174+
175+ if (source .matches ("[\n ]*" )) {
176+ logger .debug (source ); // $ hasTaintFlow
177+ } else {
178+ logger .debug (source ); // $ MISSING: $ hasTaintFlow
179+ }
180+
181+ if (Pattern .matches ("[\n ]*" , source )) {
182+ logger .debug (source ); // $ hasTaintFlow
183+ } else {
184+ logger .debug (source ); // $ MISSING: $ hasTaintFlow
185+ }
186+
187+ }
188+
22189 public void test () {
23190 {
24191 Category category = null ;
0 commit comments