[Box-Admins] Re: [squeak-dev] Re: [Seaside] SqueakSource/Seaside question - has anyone seen this problem before?

David T. Lewis lewis at mail.msen.com
Sun Jan 12 14:58:30 UTC 2014


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), 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 Arning<arning315 at 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 at lists.squeakfoundation.org
> >>http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> >>
> >
> 

> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside



More information about the Box-Admins mailing list