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 > > >
