[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug classpath/23040] New: jamvm crash after Invalid UTF8 string passed
From: |
tromey at gcc dot gnu dot org |
Subject: |
[Bug classpath/23040] New: jamvm crash after Invalid UTF8 string passed to pango_layout_set_text() |
Date: |
19 Aug 2005 18:31:52 -0000 |
Steps to reproduce:
1. Compile and run the attached testcase. I used jamvm 1.3.0 and classpath with
--enable-gtk-cairo with cairo 0.5.0 and gtk+ 2.40 that comes with fedora core
3. I did not specify -Dgnu.java.awt.peer.gtk.Graphics=Graphics2D
Expected results:
1. A window with all ASCII characters in a textarea shows up.
Actual results:
1. jamvm crashes with
** (:3318): WARNING **: Invalid UTF8 string passed to pango_layout_set_text()
*** glibc detected *** free(): invalid next size (fast): 0x096888a0 ***
Aborted (core dumped)
Testcase:
import javax.swing.*;
import java.awt.*;
public class testcase extends JFrame {
public static void main(String[] args) {
(new testcase()).show();
}
public testcase() {
JTextArea a = new JTextArea();
setContentPane(a);
for (int i=0; i<256; i++)
a.append("" + (char)i);
this.setSize(new Dimension(600, 400));
}
}
Backtrace:
Core was generated by `/home/lindi/opt/jamvm/bin/jamvm -cp
:.:/home/lindi/cp/2005-07-14T110617+0000/sh'.
Program terminated with signal 6, Aborted.
Reading symbols from /lib/tls/libpthread.so.0...done.
Loaded symbols for /lib/tls/libpthread.so.0
Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib/tls/libm.so.6...done.
Loaded symbols for /lib/tls/libm.so.6
Reading symbols from /usr/lib/libz.so.1...done.
Loaded symbols for /usr/lib/libz.so.1
Reading symbols from /lib/tls/libc.so.6...done.
Loaded symbols for /lib/tls/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from
/home/lindi/cp/2005-07-14T110617+0000/lib/classpath/libjavanio.so...done.
Loaded symbols for
/home/lindi/cp/2005-07-14T110617+0000/lib/classpath//libjavanio.so
Reading symbols from
/home/lindi/cp/2005-07-14T110617+0000/lib/classpath/libjavaio.so...done.
Loaded symbols for
/home/lindi/cp/2005-07-14T110617+0000/lib/classpath//libjavaio.so
Reading symbols from
/home/lindi/cp/2005-07-14T110617+0000/lib/classpath/libjavalang.so...done.
Loaded symbols for
/home/lindi/cp/2005-07-14T110617+0000/lib/classpath//libjavalang.so
Reading symbols from
/home/lindi/cp/2005-07-14T110617+0000/lib/classpath/libgtkpeer.so...done.
Loaded symbols for
/home/lindi/cp/2005-07-14T110617+0000/lib/classpath//libgtkpeer.so
Reading symbols from /usr/lib/libgtk-x11-2.0.so.0...done.
Loaded symbols for /usr/lib/libgtk-x11-2.0.so.0
Reading symbols from /usr/lib/libgdk-x11-2.0.so.0...done.
Loaded symbols for /usr/lib/libgdk-x11-2.0.so.0
Reading symbols from /usr/lib/libatk-1.0.so.0...done.
Loaded symbols for /usr/lib/libatk-1.0.so.0
Reading symbols from /usr/lib/libpangoxft-1.0.so.0...done.
Loaded symbols for /usr/lib/libpangoxft-1.0.so.0
Reading symbols from /usr/lib/libpangox-1.0.so.0...done.
Loaded symbols for /usr/lib/libpangox-1.0.so.0
Reading symbols from /usr/lib/libgthread-2.0.so.0...done.
Loaded symbols for /usr/lib/libgthread-2.0.so.0
Reading symbols from /usr/lib/libgdk_pixbuf-2.0.so.0...done.
Loaded symbols for /usr/lib/libgdk_pixbuf-2.0.so.0
Reading symbols from /usr/lib/libfreetype.so.6...done.
Loaded symbols for /usr/lib/libfreetype.so.6
Reading symbols from
/home/lindi/installdir-2005-06-14/cairo/lib/libcairo.so.1...done.
Loaded symbols for /home/lindi/installdir-2005-06-14/cairo/lib/libcairo.so.1
Reading symbols from /usr/lib/libfontconfig.so.1...done.
Loaded symbols for /usr/lib/libfontconfig.so.1
Reading symbols from
/home/lindi/installdir-2005-06-14/cairo/lib/libpixman.so.1...done.
Loaded symbols for /home/lindi/installdir-2005-06-14/cairo/lib/libpixman.so.1
Reading symbols from /usr/X11R6/lib/libXrender.so.1...done.
Loaded symbols for /usr/X11R6/lib/libXrender.so.1
Reading symbols from /usr/X11R6/lib/libX11.so.6...done.
Loaded symbols for /usr/X11R6/lib/libX11.so.6
Reading symbols from /usr/X11R6/lib/libXext.so.6...done.
Loaded symbols for /usr/X11R6/lib/libXext.so.6
Reading symbols from /usr/lib/libpng12.so.0...done.
Loaded symbols for /usr/lib/libpng12.so.0
Reading symbols from /usr/lib/libpangoft2-1.0.so.0...done.
Loaded symbols for /usr/lib/libpangoft2-1.0.so.0
Reading symbols from /usr/lib/libpango-1.0.so.0...done.
Loaded symbols for /usr/lib/libpango-1.0.so.0
Reading symbols from /usr/lib/libgobject-2.0.so.0...done.
Loaded symbols for /usr/lib/libgobject-2.0.so.0
Reading symbols from /usr/lib/libgmodule-2.0.so.0...done.
Loaded symbols for /usr/lib/libgmodule-2.0.so.0
Reading symbols from /usr/lib/libglib-2.0.so.0...done.
Loaded symbols for /usr/lib/libglib-2.0.so.0
Reading symbols from /usr/X11R6/lib/libXtst.so.6...done.
Loaded symbols for /usr/X11R6/lib/libXtst.so.6
Reading symbols from /usr/X11R6/lib/libXrandr.so.2...done.
Loaded symbols for /usr/X11R6/lib/libXrandr.so.2
Reading symbols from /usr/X11R6/lib/libXi.so.6...done.
Loaded symbols for /usr/X11R6/lib/libXi.so.6
Reading symbols from /usr/X11R6/lib/libXinerama.so.1...done.
Loaded symbols for /usr/X11R6/lib/libXinerama.so.1
Reading symbols from /usr/X11R6/lib/libXft.so.2...done.
Loaded symbols for /usr/X11R6/lib/libXft.so.2
Reading symbols from /usr/X11R6/lib/libXcursor.so.1...done.
Loaded symbols for /usr/X11R6/lib/libXcursor.so.1
Reading symbols from /usr/lib/libexpat.so.0...done.
Loaded symbols for /usr/lib/libexpat.so.0
Reading symbols from /usr/X11R6/lib/X11/locale/lib/common/xlcDef.so.2...done.
Loaded symbols for /usr/X11R6/lib/X11/locale/lib/common/xlcDef.so.2
Reading symbols from /lib/libnss_files.so.2...done.
Loaded symbols for /lib/libnss_files.so.2
Reading symbols from /usr/lib/gconv/ISO8859-1.so...done.
Loaded symbols for /usr/lib/gconv/ISO8859-1.so
Reading symbols from /usr/lib/gtk-2.0/2.4.0/engines/libbluecurve.so...done.
Loaded symbols for /usr/lib/gtk-2.0/2.4.0/engines/libbluecurve.so
Reading symbols from
/home/lindi/cp/2005-07-14T110617+0000/lib/classpath/libjavalangreflect.so...done.
Loaded symbols for
/home/lindi/cp/2005-07-14T110617+0000/lib/classpath//libjavalangreflect.so
Reading symbols from /usr/lib/pango/1.4.0/modules/pango-basic-fc.so...done.
Loaded symbols for /usr/lib/pango/1.4.0/modules/pango-basic-fc.so
#0 0x0012a7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
(gdb) bt
#0 0x0012a7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
#1 0x0016b7d5 in raise () from /lib/tls/libc.so.6
#2 0x0016d149 in abort () from /lib/tls/libc.so.6
#3 0x0019f27a in __libc_message () from /lib/tls/libc.so.6
#4 0x001a5abf in _int_free () from /lib/tls/libc.so.6
#5 0x001a5e3a in free () from /lib/tls/libc.so.6
#6 0x00de7e2a in Java_gnu_java_awt_peer_gtk_GdkFontPeer_getTextMetrics
(env=0x805e974, java_font=0xb01c70e8, str=0xb0202e68, java_metrics=0xb0202eb0)
at gnu_java_awt_peer_gtk_GdkFontPeer.c:302
#7 0x0805a891 in callJNIMethod (env=0x805e974, class=0x0, sig=0x958b5f8
"(Ljava/lang/String;[D)V", ret_type=3318, ostack=0x940c49c, f=0xde7da0
"U211åWVS203ì,è",
args=3) at dll_md.c:64
#8 0x0804dbc5 in callJNIWrapper (class=0xb00947a8, mb=0x958d32c,
ostack=0x940c49c) at dll.c:330
#9 0x080511ef in executeJava () at interp.c:2240
#10 0x0804e6c0 in executeMethodVaList (ob=0x0, class=0xb008de10, mb=0x94cbb50,
jargs=0xbff9d160 "") at execute.c:68
#11 0x0804e740 in executeMethodArgs (ob=0x0, class=0xb008de10, mb=0x94cbb50) at
execute.c:39
#12 0x080520fb in main (argc=6, argv=0xbff9d214) at jam.c:327
Feel free to ask for more info if you can't reproduce this.
------- Additional Comments From tromey at gcc dot gnu dot org 2005-08-19
18:31 -------
FWIW this also fails with cvs head gij. (Though I don't see the 'free' problem)
You can work around this by by starting the loop at 1 instead of 0.
The problem here is that Java "utf-8" has a special representation for \0.
It represents this as a 2-byte sequence instead of as the 1-byte \0 sequence.
This is done to make it possible to manipulate Java strings containing \0
in C; otherwise the \0 byte would terminate the C string.
I can think of two possible fixes.
The first idea is to change our Gtk peers to work around this.
For instance we could replace the 2-byte sequence in C strings with some
substitution character (not sure what though). Or, we could implement
our own utf16 -> utf8 conversion (which may be slightly more efficient).
This would ensure that we don't send Pango something that it does not
understand.
The second idea would be to change Pango to understand the java convention.
This is not completely unreasonable IMO as (1) the java convention is in
fairly wide use, and (2) the java convention is obviously useful.
--
Summary: jamvm crash after Invalid UTF8 string passed to
pango_layout_set_text()
Product: classpath
Version: unspecified
Status: NEW
Severity: normal
Priority: P3
Component: classpath
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: from-classpath at savannah dot gnu dot org
CC: bug-classpath at gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23040
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Bug classpath/23040] New: jamvm crash after Invalid UTF8 string passed to pango_layout_set_text(),
tromey at gcc dot gnu dot org <=