I posted this bug report through http://www.kaffe.org/cgi-bin/kaffe,
but it did not reach [EMAIL PROTECTED]
because kaffe.novare.net said "550 <[EMAIL PROTECTED]>
... Relaying denied."
I do not know whether this report was accepted by
the Kaffe Bug Tracking System, so I would like to send it to
this mailing list again.
From: [EMAIL PROTECTED]
Date: Tue, 29 Feb 2000 03:05:11 -0600
Message-Id: <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Subject: java.io.OutputStreamWriter: too small buffer
Full_Name: Ito Kazumitsu
Version: kaffe-1.0.5 (snap)
OS: Linux 2.0.38
Submission from: (NULL) (210.225.95.3)
The output buffer of java.io.OutputStreamWriter is too small to
safely run XT, the XSLT processor. The following error occurs
when processing a XML document containing Japanese characters:
## o = 1017 ## oe = 1024## o = 1020 ## oe = 1024## o = 1023
## oe = 1024java.lang.ArrayIndexOutOfBoundsException
at kaffe.io.CharToByteUTF8.convert(CharToByteUTF8.java:37)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:79)
at com.jclark.xsl.sax.HTMLOutputHandler.flushBuf(HTMLOutputHandler.java:721)
at com.jclark.xsl.sax.HTMLOutputHandler.endDocument(HTMLOutputHandler.java:732)
at com.jclark.xsl.sax.ResultBase.end(ResultBase.java:line unknown, pc
0x8390dc5)
at com.jclark.xsl.tr.SheetImpl.process(SheetImpl.java:line unknown, pc
0x83dccc7)
at com.jclark.xsl.sax.XSLProcessorImpl.parse(XSLProcessorImpl.java:line
unknown, pc 0x8394bc4)
at com.jclark.xsl.sax.Driver.transform(Driver.java:line unknown, pc
0x81f8c60)
at com.jclark.xsl.sax.Driver.transformFile(Driver.java:line unknown, pc
0x81f5517)
at com.jclark.xsl.sax.Driver.main(Driver.java:line unknown, pc
0x81e54c3)
where CharToByteUTF8.java is patched for debugging as follows:
==
$ diff -c ~/kaffe/kaffe-snap/libraries/javalib/kaffe/io/CharToByteUTF8.java
kaffe/io/CharToByteUTF8.java
*** /home/ito/kaffe/kaffe-snap/libraries/javalib/kaffe/io/CharToByteUTF8.java
Sun Oct 10 05:09:48 1999
--- kaffe/io/CharToByteUTF8.javaTue Feb 29 17:13:37 2000
***
*** 22,27
--- 22,29
int ie = fpos + flen;
for (; i < ie && o < oe; i++) {
+ System.err.print("## o = " + o +"\t");
+ System.err.print("## oe = " + oe + "\t");
char chr = from[i];
if (chr >= '\u0001' && chr <= '\u007F') {
to[o++] = (byte)chr;
==
And enlarging the buffer, that is, applying the following
patch to OutputStreamWriter.java helps solve this problem
although this is nothing but a workaround.
==
diff -c ~/kaffe/kaffe-snap/libraries/javalib/java/io/OutputStreamWriter.java
java/io/OutputStreamWriter.java
*** /home/ito/kaffe/kaffe-snap/libraries/javalib/java/io/OutputStreamWriter.javFri
Aug 13 10:56:01 1999
--- java/io/OutputStreamWriter.java Tue Feb 29 17:58:37 2000
***
*** 15,21
public class OutputStreamWriter
extends Writer
{
! private final static int BUFDEFAULT = 1024;
private final static int MINMARGIN = 32;
private OutputStream strm;
private CharToByteConverter encoding;
--- 15,22
public class OutputStreamWriter
extends Writer
{
! //private final static int BUFDEFAULT = 1024;
! private final static int BUFDEFAULT = 8*1024;
private final static int MINMARGIN = 32;
private OutputStream strm;
private CharToByteConverter encoding;
==