[armedbear-devel] encoding bug in Stream.readPreservingWhitespace (classpath)
Erik Huelsmann
ehuels at gmail.com
Sun Apr 25 09:36:36 UTC 2010
Hi Eric,
On Sun, Apr 25, 2010 at 11:15 AM, Eric Marsden <eric.marsden at free.fr> wrote:
> Hi,
>
> Attempting to run ABCL with jamvm (which uses the classpath libraires),
> I get
>
> ,----
> | Armed Bear Common Lisp 0.20.0-dev
> | Java 1.5.0 GNU Classpath
> | JamVM
> | Low-level initialization completed in 0.371 seconds.
> | Exception in thread "interpreter" java.lang.IllegalStateException
> | at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:163)
> | at org.armedbear.lisp.util.DecodingReader.unread(DecodingReader.java:168)
> | at org.armedbear.lisp.util.DecodingReader.unread(DecodingReader.java:156)
> | at org.armedbear.lisp.Stream._unreadChar(Stream.java:1708)
> | at java.lang.Thread.run(Thread.java:745)
> `----
>
> I see in org.armedbear.lisp.Stream.read() a sequence
>
> int n = _readChar();
> if (n >= 0) {
> char c = (char) n; // ### BUG: Codepoint conversion
> Readtable rt = rta.rt(thread);
> if (!rt.isWhitespace(c))
> _unreadChar(c);
> }
>
> which seems likely to be related to this problem. If I print
> the offending character in DecodingReader.unread() it looks like a
> #\space. Any suggestions on how to proceed?
Do you have any idea if the character you were trying to read is
outside of the BMP (a so-called Supplemental character; with a code
point > #xFFFF)? If that's the case, then you certainly did hit that
bug.
I had hoped the issue would be relatively infrequent when I added the
comment above. Maybe it is, but if you're hitting it, we seem to have
an active requirement to fix it...
Bye,
Erik.
More information about the armedbear-devel
mailing list