I observed some code clones in Tomcat and found inconsistent code. Could anyone explain why this is not a bug?
/tomcat/trunk/java/org/apache/coyote/ajp/AjpMessage.java 195 if (cc == null) { 196 log.error(sm.getString("ajpmessage.null"), 197 new NullPointerException()); 198 appendInt(0); 199 appendByte(0); 200 return; 201 } 202 int start = cc.getStart(); 203 int end = cc.getEnd(); 204 appendInt(end - start); 205 char[] cbuf = cc.getBuffer(); 206 for (int i = start; i < end; i++) { 207 char c = cbuf[i]; 208 // Note: This is clearly incorrect for many strings, 209 // but is the only consistent approach within the current 210 // servlet framework. It must suffice until servlet output 211 // streams properly encode their output. 212 if (((c <= 31) && (c != 9)) || c == 127 || c > 255) { 213 c = ' '; 214 } 215 appendByte(c); 216 } 217 appendByte(0); /tomcat/trunk/java/org/apache/coyote/ajp/AjpMessage.java 230 if (str == null) { 231 log.error(sm.getString("ajpmessage.null"), 232 new NullPointerException()); 233 appendInt(0); 234 appendByte(0); 235 return; 236 } 237 int len = str.length(); 238 appendInt(len); 239 for (int i = 0; i < len; i++) { 240 char c = str.charAt (i); 241 // Note: This is clearly incorrect for many strings, 242 // but is the only consistent approach within the current 243 // servlet framework. It must suffice until servlet output 244 // streams properly encode their output. 245 if (((c <= 31) && (c != 9)) || c == 127 || c > 255) { 246 c = ' '; 247 } 248 appendByte(c); 249 } 250 appendByte(0); Quick description of the inconsistency Two code snippets are very similar code, but as you see, both codes use different ways to compute the condition of for loop.