Ciao tommaso

add a test :)

On 8/9/14 15:18, Tommaso Dal Sasso wrote:

On 08/09/14 15:16, Hernán Morales Durand wrote:
Tommaso I can give you access to the repository if you send me your SmalltalkHub user name.
Cheers,

Hernán

Sure, it is dalsat
Thanks,

Tommaso

2014-09-08 6:28 GMT-03:00 Tommaso Dal Sasso <[email protected] <mailto:[email protected]>>:

    Hello everybody,

    I found a bug while playing with the XMLPullParser:

    When using XML entities encoded in hexadecimal the parser throws
    an exception.
    For example: &#xA; is the hexadecimal encoding of &#10; which is
    the line feed.
    If you try to parse: '<tag contents="one&#xAtwo" />' you get a
    "Expected Number" error.


    I investigated the problem, and found that it is caused by the
    method XMLPullParser>>readNumberBase:

    If the base of the parsed number is not 10, it executes the
    following lines:
    numberString := self nextUpTo: $;.
    self stream skip: -1.
    [...]

    However, the method nextUpTo: does not exist. A MNU is then raised
    and handled in nextCharReference: by a greedy
    "on: Error do: [:ex | self errorExpected: 'Number.']."
    thus causing the exception.

    The solution is either to implement nextUpTo: or to change it in
    one of the two existing methods: nextUpToAll: or
    nextTrimmedBlanksUpTo:
    Example: numberString := self nextUpToAll: ';'.

    Also, in the following line, it calls the accessor "stream", which
    does not exist and causes the same problem.
    The solution here is to change
    self stream skip: -1.
    into
    stream skip: -1.

    The following two test cases show the problem. The first one shows
    the correct behavior:

    XMLPullParserTest>>testASCIIEntity
        | parser |

        parser := XMLPullParser parse: '
            <tag contents="one&#10;two" />'.

        self assert: (parser next at: #contents) equals: (Character lf
    join: #(one two))


    The second one shows the error:

    XMLPullParserTest>>testUnicodeEntity
        | parser |

        parser := XMLPullParser parse: '
            <tag contents="one&#xA;two" />'.

        self assert: (parser next at: #contents) equals: (Character lf
    join: #(one two))


    I hope it is clear enough. I can also commit the fix myself, if
    you give me write access.

    Thanks,
    Tommaso







Reply via email to