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

Tobias Pape Das.Linux at gmx.de
Fri Oct 27 17:33:41 UTC 2017


> On 27.10.2017, at 18:40, monty <monty2 at programmer.net> wrote:
> 
> 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?

That's problematic.
Some conversation was always done, you never ended up with mere Strings/ByteArrays.

This is the old version, that opportunistically applied inflate/deflate:
================
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 headerAt: 'content-encoding') = 'gzip' ifFalse: [ ^result ].
	^(GZipReadStream on: result) upToEnd
=================


Maybe we need a plain "get me the bytes" variant.
Oh there is:

WebMessage>>streamFrom:to:size:progress: 

That's somewhat inelegant but should work…



Best regards
	-Tobias

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