"Filip Hanik - Dev Lists" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Bill Barker wrote: >> "Remy Maucherat" <[EMAIL PROTECTED]> wrote in message >> news:[EMAIL PROTECTED] >> >>> Filip Hanik - Dev Lists wrote: >>> >>>> Test Case and 5.5.x patch can be found here. >>>> http://people.apache.org/~fhanik/tomcat/b2c/ >>>> >>>> This is what is happening >>>> >>>> int cnt=conv.read( result, 0, BUFFER_SIZE ); >>>> is called with a "while (true)" statement, >>>> >>>> When the IntermediateInputStream.read returns -1, the above statement >>>> returns cnt==1. >>>> So to avoid calling conv.read, we must check to see if we have more >>>> bytes to read by implementing the available() method, to avoid the >>>> inputstream ever returning -1. >>>> >>> It's possible, but I have a hard time understanding the issue. >>> >>> >> >> The issue is that InputStreamReader reads 8192 bytes from >> IntermediateInputStream on the first go. It then translates them into >> 2734 chars, but thinks that the last few bytes represent an incomplete >> char, so holds onto them. On the next call, IntermediateInputStream >> returns -1, so InputStreamReader outputs the last char as best it can >> (resulting in returning 1). Then the IntermediateInputStream buffer is >> reset, and it can continue on reading (but from the wrong position, >> resulting in corruption). >> >> Filip's patch is inelegant (better would be to use the ByteChunk sink), >> but other than my looking for a better way to do it, I can't come up with >> the required technical reason to porting the base of it to 5.5 (of >> course, I could care less what he does in his sandbox :). >> > I've committed the fix to 5.5, if you find a more elegant way of solving > the actual problem, feel free to revert it and commit another fix. I don't > care about the how, as long as there is a fix that will be included in the > tag 5.5.25 on Friday >
No problem. I can see how to do this better, but I'll wait until the weekend to commit (since it's not totally trivial, I don't want a one-day window for regression testing :). That way 5.5.25 can go out with your patch. It doesn't include the NIO dependancy (which was my only concern), so it works well enough for me for now. > Filip --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]