This is the log message to which I'm referring. It put the (char) in the 
return statement of doRead()

revision 1.5.2.4
date: 2001/01/30 04:17:53;  author: danmil;  state: Exp;  lines: +4 -4

Fixed (yet another) bug with File Upload.  Tomcat was returning signed data
to servlets (via ServletInputStream.read()), which was causing servlets to
read 0xFF as EOF.

Contributed by Keith Wannamaker ([EMAIL PROTECTED]):


David

kevin seguin wrote:

> i didn't see any comments in commit messages that mentioned the problem
> you are speaking of.  can you find that comment again and send it? 
> thanks.
> 
> DAK wrote:
> 
>> Here's my first submission! It pertains to Tomcat-3.2.1 and looks to be
>> the same in 3.2.2.b4
>> 
>> I have some client code that sends a jar file to the servlet. The jar
>> file was getting corrupted. After much digging, I found a CVS commit to
>> Ajp13ConnectorRequest.java that mentioned a problem like this with the
>> doRead() method. It turns out the the same applies to the doRead(byte[],
>> int, int) method. The same problem exists in the Ajp12ConnectionHandler
>> for that byte array read. Single byte reads for both protocols work just
>> fine. I'm including the diffs for these classes to show what I'm talking
>> about. I may be called a developer now, but I'm certainly not a
>> commiter, so what is the procedure for getting this fix validated by
>> somebody else and put into the codebase?
>> 
>> Index: Ajp13ConnectorRequest.java
>> ===================================================================
>> RCS file:
>> 
>/home/cvspublic/jakarta-tomcat/src/share/org/apache/tomcat/service/connector/Attic/Ajp13ConnectorRequest.java,v
>> retrieving revision 1.5.2.7
>> diff -r1.5.2.7 Ajp13ConnectorRequest.java
>> 274c274,277
>> <           System.arraycopy(bodyBuff, pos, b, off, c);
>> ---
>>  >           //System.arraycopy(bodyBuff, pos, b, off, c);
>>  >           for (int i=pos, j=off, d=c; d > 0; i++, j++, d--) {
>>  >               b[j] = (byte)(((char)bodyBuff[i])&0xff);
>>  >           }
>> 
>> What I've done here is to replace the array copy with a loop that does
>> the appropriate data conversion.
>> 
>> Index: Ajp12ConnectionHandler.java
>> ===================================================================
>> RCS file:
>> 
>/home/cvspublic/jakarta-tomcat/src/share/org/apache/tomcat/service/connector/Attic/Ajp12ConnectionHandler.java,v
>> retrieving revision 1.28.2.4
>> diff -r1.28.2.4 Ajp12ConnectionHandler.java
>> 542a543,549
>>  >     public  int read(byte b[], int off, int len) throws IOException {
>>  >       int ret = super.read(b, off, len);
>>  >       for (int i=0, j=off; i<len; i++, j++) {
>>  >           b[j] = (byte)(((char)b[j])&0xff);
>>  >       }
>>  >       return ret;
>>  >     }
>> 
>> In this case, I over-rode the read method to convert the data after
>> calling the super.read
>> 
>> I'd like to see this stuff end up in 3.2.2.b5
>> 
>>    Thanks,
>>        David Kavanagh
> 

Reply via email to