If Chris confirms it fixes his problem, we probably should.

On 02 Aug 2012, at 19:43, Stéphane Ducasse <[email protected]> wrote:

> sven should we do an update in zinc for 2.0?
> 
> Stef
> 
> On Aug 2, 2012, at 11:39 AM, Sven Van Caekenberghe wrote:
> 
>> Hi Chris,
>> 
>> On 21 Jul 2012, at 17:52, Chris <[email protected]> wrote:
>> 
>>> On 20/07/2012 18:30, Sven Van Caekenberghe wrote:
>>>> On 20 Jul 2012, at 18:22, Chris wrote:
>>>> 
>>>>> Thanks for that. I'm actually still having a bit of trouble when the file 
>>>>> is bigger than the chunk size. 
>>>>> ZnChunkedReadStream>>#readInto:startingAt:count: uses a limit variable 
>>>>> which is bigger than the collection and requestedCount.
>>>> I won't be able to do anything until the beginning of August.
>>>> 
>>>> It would be really helpful if you could provide me with an actual test 
>>>> case that fails.
>>> 
>>> Okay thanks Sven, I'll see what I can do. I am just working with a third 
>>> party server which is sending chunks of 1mb (which I assume is valid) and I 
>>> think Zinc just needs to support chunks bigger than the 16k in the above 
>>> method
>>> 
>>> Regards,
>>> Chris
>> 
>> The 16K buffer used in ZnUtils>>#streamFrom:to:[size:] is independent from 
>> the chunk buffer used in ZnChunkedReadStream, BUT you did find a serious 
>> problem. Actually the code of 
>> ZnChunkedReadStream>>#readInto:startingAt:count: was embarrassingly bad and 
>> wrong although it did work in all cases thrown to it up until now.
>> 
>> I added an extra test for the case where the buffer being used is smaller 
>> than the chunk size:
>> 
>> ZnChunkedReadStream>>#testReadingBuffered
>>      | data chunked plain buffer readStream |
>>      data := String withAll: ($a to: $z), ($A to: $Z).
>>      chunked := String streamContents: [ :stream |
>>              ZnUtils nextPutAll: data on: stream chunked: 16 ].
>>      readStream := ZnChunkedReadStream on: chunked readStream.
>>      buffer := String new: 11.
>>      plain := String streamContents: [ :output | | readCount |
>>              [ readStream atEnd ] whileFalse: [
>>                      readCount := readStream readInto: buffer startingAt: 1 
>> count: buffer size.
>>                      output next: readCount putAll: buffer ] ].
>>      self assert: plain equals: data
>> 
>> As usual, load the latest code to get the fix. I hope it now works for your 
>> particular case.
>> 
>> Thanks again for reporting this, being persistent about it and for pointing 
>> me in the right direction !
>> 
>> Regards,
>> 
>> Sven
>> 
>> Here are the actual commits:
>> 
>> ===
>> Name: Zinc-HTTP-SvenVanCaekenberghe.291
>> Author: SvenVanCaekenberghe
>> Time: 2 August 2012, 11:26:02 am
>> UUID: 3d8c50cd-2d7b-459f-89f3-b77a23dccfdd
>> Ancestors: Zinc-HTTP-SvenVanCaekenberghe.290
>> 
>> various fixes to ZnChunkedReadStream>>#readInto:startingAt:count: (thx Chris 
>> Bailey for reporting the problem);
>> added ZnLimitedReadStream>>#nextInto: as it is used by Fuel
>> ===
>> Name: Zinc-Tests-SvenVanCaekenberghe.151
>> Author: SvenVanCaekenberghe
>> Time: 2 August 2012, 11:27:58 am
>> UUID: 3da15e83-c0ca-4066-a496-71d91393db01
>> Ancestors: Zinc-Tests-SvenVanCaekenberghe.150
>> 
>> added new ZnChunkedReadStreamTests>>#testReadingBuffered to validate various 
>> fixes to ZnChunkedReadStream>>#readInto:startingAt:count: (thx Chris Bailey 
>> for reporting the problem)
>> ===
>> 
>> --
>> Sven Van Caekenberghe
>> http://stfx.eu
>> Smalltalk is the Red Pill
>> 
>> 
>> 
> 
> 


Reply via email to