Tobias Pape uploaded a new version of WebClient-Core to project The Trunk: http://source.squeak.org/trunk/WebClient-Core-jr.104.mcz
==================== Summary ====================
Name: WebClient-Core-jr.104 Author: jr Time: 3 January 2017, 2:00:53.087318 pm UUID: d1ea9e44-934e-db44-9617-a57b408678fe Ancestors: WebClient-Core-ul.103
fix: bogus chunked stream data if a later chunk is smaller than a previous one
also do not fetch the next chunk until its contents is requested
=============== Diff against WebClient-Core-ul.103 ===============
Item was changed: ----- Method: WebChunkedStream>>next: (in category 'accessing') ----- next: anInteger "Answer the next anInteger elements of my collection. overriden for simplicity"
+ [(position + anInteger > readLimit) and:[chunkSize ~= 0]] - [(position + anInteger >= readLimit) and:[chunkSize ~= 0]] whileTrue:[self nextChunk].
^super next: anInteger !
Item was changed: ----- Method: WebChunkedStream>>nextChunk (in category 'accessing') ----- nextChunk "Answer the next chunk from a message using chunked transfer encoding."
| chunk | chunkSize = 0 ifTrue:[^'']. "read last chunk" chunkSize := Integer readFrom: (sourceStream upToAll: String crlf) asString base: 16. chunkSize = 0 ifFalse:[chunk := sourceStream next: chunkSize]. sourceStream skip: 2. "CrLf" (chunkSize + readLimit - position) <= collection size ifTrue:[ collection replaceFrom: 1 to: (readLimit-position) with: collection startingAt: position+1. readLimit := readLimit - position. position := 0. collection replaceFrom: readLimit+1 to: readLimit + chunkSize with: chunk startingAt: 1. readLimit := readLimit + chunkSize. ] ifFalse:[ + position < readLimit + ifTrue: [collection := (collection copyFrom: position + 1 to: readLimit), chunk] + ifFalse: [collection := chunk]. + position := 0. + readLimit := collection size. - collection := collection, chunk. - readLimit := readLimit + chunkSize. ]. ^chunk !
squeak-dev@lists.squeakfoundation.org