[squeak-dev] The Trunk: WebClient-Core-topa.112.mcz

monty monty2 at programmer.net
Fri Oct 27 16:40:02 UTC 2017


This series of content decoding changes is not backwards compatible. Existing code that does its own response decoding with the assumption that WebClient won't do it will now double-decode the response--corrupting it. But breaking existing code is probably worth it here because of the gains in intuitiveness and correctness.

Is there any way to disable the automatic response decoding?

> Sent: Wednesday, September 20, 2017 at 11:29 AM
> From: commits at source.squeak.org
> To: squeak-dev at lists.squeakfoundation.org, packages at lists.squeakfoundation.org
> Subject: [squeak-dev] The Trunk: WebClient-Core-topa.112.mcz
>
> Tobias Pape uploaded a new version of WebClient-Core to project The Trunk:
> http://source.squeak.org/trunk/WebClient-Core-topa.112.mcz
> 
> ==================== Summary ====================
> 
> Name: WebClient-Core-topa.112
> Author: topa
> Time: 20 September 2017, 5:29:06.096983 pm
> UUID: 60b494fc-0652-4a28-be5a-1578963e5aed
> Ancestors: WebClient-Core-topa.111
> 
> Abide Postel's law for text conversion.
> 
> Be conservative in what you do, be liberal in what you accept from others.
> 
> =============== Diff against WebClient-Core-topa.111 ===============
> 
> Item was changed:
>   ----- Method: WebMessage>>getContentWithProgress: (in category 'private') -----
>   getContentWithProgress: progressBlockOrNil
>   	"Reads available content and returns it."
>   
>   	| length result |
>   	length := self contentLength.
>   	result := (stream isBinary ifTrue:[ ByteArray ] ifFalse: [ ByteString ]) 
>   		new: (length ifNil: [ 1000 ])
>   		streamContents: [ :outputStream | 
>   			self 
>   				streamFrom: stream
>   				to: outputStream
>   				size: length
>   				progress: progressBlockOrNil ].
>   	self decoderForContentEncoding ifNotNil: [:decoder |
>   		result := (decoder on: result) upToEnd].
>   	self textConverterForContentType ifNotNil: [:converter |
> + 		[result := result convertFromWithConverter: converter]
> + 		on: InvalidUTF8 "some servers lie"
> + 		do: [^ result]].
> - 		result := result convertFromWithConverter: converter].
>   	^ result
>   !
> 
> Item was changed:
>   ----- Method: WebMessage>>textConverterForContentType (in category 'accessing') -----
>   textConverterForContentType
>   
>   	| index contentType |
>   	contentType := self contentType.
>   	contentType size < 8 ifTrue: [ ^nil ].
> - 	(contentType beginsWithAnyOf: #('application/' 'image/' 'video/' 'audio/')) ifTrue: [^nil].
>   	index := contentType findString: 'charset=' startingAt: 1 caseSensitive: false.
>   	index = 0 ifTrue: [ ^nil ].
>   	^TextConverter newForEncoding: (contentType allButFirst: index + 7) "'charset=' size - 1"!
> 
> 
> 


More information about the Squeak-dev mailing list