On 12.01.2014, at 15:58, David T. Lewis lewis@mail.msen.com wrote:
Bob,
Thanks again for debugging this problem on squeaksource.com (and apologies for not following up on the matter sooner). The updated version of the decodeUrlEncodedForm:multipleValues: does indeed resolve the problem that we were seeing. Unfortunately, I found another problem related to WideString member names, which is that I cannot (in squeaksource.com screens) edit a project and add a new developer to that existing project.
It seems clear (as previously noted) that we really need to update our source.squeak.org and squeaksource.com images to use an up to date Seaside. I'm not going to attempt that effort (I'm mainly concerned with just keeping squeaksource.com operating)
Let me tell you, it takes years ;)
Best -Tobiad
, so in the mean time I think I will just work around the problem by converting the WideString member names to ByteString.
Fortunately there are only two member names that are WideString, and they both belong to the same person (CC'ed on this message), so I think that the impact is minor.
Thanks,
Dave
On Mon, Dec 23, 2013 at 12:16:46PM -0500, Bob Arning wrote:
And I see that's exactly what newer versions of this method do...
decodeUrlEncodedForm: string multipleValues: boolean | dict key value start end eqSignPos more | dict := boolean ifTrue: [HttpFormDictionary new] ifFalse: [Dictionary new]. string isEmptyOrNil ifTrue: [^dict]. more := true. start := 1. [end := string indexOf: $& startingAt: start. end == 0 ifTrue: [end := string size. more := false] ifFalse: [end := end - 1]. eqSignPos := string indexOf: $= startingAt: start. (eqSignPos > end or: [eqSignPos == 0]) ifTrue: [key := (key := string copyFrom: start to: end) unescapePercentsWithTextEncoding: nil. value := ''] ifFalse: [key := (key := string copyFrom: start to: eqSignPos-1) unescapePercentsWithTextEncoding: nil. value := (value := string copyFrom: eqSignPos+1 to: end) unescapePercentsWithTextEncoding: nil]. self addKey: key value: value toForm: dict multipleValues: boolean. start := end + 2. more] whileTrue.
^dict
Cheers, Bob
On 12/23/13 11:04 AM, Bob Arning wrote:
I see how it happens...
using Mac, Chrome with 8859-1 encoding as default, I typed
S, t, option-e, e, p, h, a, n, e
in the login screen. What arrives back at the server is
'11=St%E9phane&12=&13=Login'
wherupon HttpRequest tries to parse this
decodeUrlEncodedForm: string multipleValues: boolean | dict key value start end eqSignPos more | dict _ boolean ifTrue: [HttpFormDictionary new] ifFalse: [Dictionary new]. string isEmptyOrNil ifTrue: [^dict]. more _ true. start _ 1. [end _ string indexOf: $& startingAt: start. end == 0 ifTrue: [end _ string size. more _ false] ifFalse: [end _ end - 1]. eqSignPos _ string indexOf: $= startingAt: start. (eqSignPos > end or: [eqSignPos == 0]) ifTrue: [key _ (key _ string copyFrom: start to: end) unescapePercents. value _ ''] ifFalse: [key _ (key _ string copyFrom: start to: eqSignPos-1) unescapePercents. value _ (value _ string copyFrom: eqSignPos+1 to: end) *unescapePercents*]. self addKey: key value: value toForm: dict multipleValues: boolean. start _ end + 2. more] whileTrue.
^dict
and #unescapePercents does
self unescapePercentsWithTextEncoding: 'utf-8'
'St%E9phane' unescapePercents ==> 'St???ane'
whereas, if we knew it was not utf-8, then
'St%E9phane' unescapePercentsWithTextEncoding: nil ==> 'St??phane'
gives the expected answer. I tried to coax my browser to return utf-8, but that had no effect, so I'm wondering if this application would be better off using unescapePercentsWithTextEncoding: nil rather than unescapePercents
Cheers, Bob
On 12/23/13 8:15 AM, Philippe Marschall wrote:
On Mon, Dec 23, 2013 at 1:43 PM, Bob Arningarning315@comcast.net wrote:
It is a WideString and
self asArray collect: [ :e | e asciiValue radix: 16] = #('53' '74' '3FC09C28' '61' '6E' '65' '20' '4D' '75' '6E' '69' '6F' '7A')
Interesting, so somebody somewhere along the way converted the input from something (likely utf-8 although the page is iso-8859-1) to Squeak encoding.
Cheers Philippe _______________________________________________ seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside