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.

Reply via email to