This is the mail archive of the
java-prs@sourceware.cygnus.com
mailing list for the Java project.
libgcj/103: libgcj crashes on string operation
- To: java-gnats at sourceware dot cygnus dot com
- Subject: libgcj/103: libgcj crashes on string operation
- From: gback at cs dot utah dot edu
- Date: 16 Nov 1999 17:59:04 -0000
- Reply-To: gback at cs dot utah dot edu
- Resent-Cc: java-prs at sourceware dot cygnus dot com, green at cygnus dot com
- Resent-Reply-To: java-gnats@sourceware.cygnus.com, gback@cs.utah.edu
>Number: 103
>Category: libgcj
>Synopsis: libgcj crashes on string operation
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: tromey
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Tue Nov 16 10:00:01 PST 1999
>Closed-Date:
>Last-Modified:
>Originator: gback@cs.utah.edu
>Release: CVS ca. Oct 15
>Organization:
>Environment:
RH 5.2, glibc 2.0.7, Linux 2.2.12
>Description:
libgcj crashes on the following program.
Note that gcj won't compile the .java code, use
Sun's JDK or jikes to create bytecode first:
(gdb) run
Starting program: /x/gback/transvirtual/tmp/gcjpure/./a.out
1
2
3
Program received signal SIGSEGV, Segmentation fault.
0x40100a28 in java::lang::String::hashCode (this=0x0)
at ../../../libgcj/libjava/java/lang/natString.cc:90
90 return hashChars(JvGetStringChars(this), length());
Current language: auto; currently c++
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
java::lang::String::charAt (this=0x400a92a0, i=0)
at ../../../libgcj/libjava/java/lang/natString.cc:444
444 return JvGetStringChars(this)[i];
(gdb) bt
#0 java::lang::String::charAt (this=0x400a92a0, i=0)
at ../../../libgcj/libjava/java/lang/natString.cc:444
#1 0x4008fa7a in gnu.gcj.convert.Output_8859_1.write (this=0x8067f60,
str=0x400a92a0, inpos=1, inlength=512, work=0x808af00)
at ../../../libgcj/libjava/gnu/gcj/convert/Output_8859_1.java:48
#2 0x400a8c2f in java.io.PrintStream.writeChars (this=0x8063d40,
str=0x400a92a0, offset=0, count=961102)
at ../../../libgcj/libjava/java/io/PrintStream.java:130
#3 0x400a86f4 in java.io.PrintStream.print (this=0x8063d40, str=0x400a92a0,
println=true) at ../../../libgcj/libjava/java/io/PrintStream.java:63
#4 0x400a92d7 in java.io.PrintStream.println (this=0x8063d40, str=0x400a92a0)
at ../../../libgcj/libjava/java/io/PrintStream.java:220
#5 0x80492b5 in C.main () at C.java:14
#6 0x400ff815 in java::lang::FirstThread::run (this=0x8064f90)
at ../../../libgcj/libjava/java/lang/natFirstThread.cc:52
#7 0x400bcb8a in java.lang.Thread.run_ (this=0x8064f90)
at ../../../libgcj/libjava/java/lang/Thread.java:119
#8 0x40103fee in java::lang::Thread::run__ (obj=0x8064f90)
at ../../../libgcj/libjava/java/lang/natThread.cc:288
#9 0x4011317a in _Jv_ThreadStart (thread=0x8064f90,
meth=0x40103fd0 <java::lang::Thread::run__(java::lang::Object *)>)
at ../../../libgcj/libjava/no-threads.cc:25
#10 0x4010406b in java::lang::Thread::start (this=0x8064f90)
at ../../../libgcj/libjava/java/lang/natThread.cc:301
#11 0x4008d2ce in JvRunMain (klass=0x804c1a0, argc=1, argv=0xbffffad4)
at ../../../libgcj/libjava/prims.cc:790
#12 0x804938b in main (argc=1, argv=0xbffffad4) at /tmp/ccVTmO9rmain.i:9
>How-To-Repeat:
Compile and run this program:
import java.io.*;
public class C {
public static void main(String av[]) {
String x = null, y = null, z = null;
LineNumberReader r = new LineNumberReader(
new InputStreamReader(System.in));
try {
x = r.readLine();
y = r.readLine();
z = r.readLine();
((String)null).hashCode();
} catch (Exception e) {
System.out.println(x);
System.out.println(y);
System.out.println(z);
}
}
}
Note that if you compile C.java with jikes, gcj will
fail even if the exception is not caused by a
NullPointerException, but even by a simple "throw new
Exception".
Secondly, if you only print x and y, it works.
Third, if you only print x, it prints nothing, but
doesn't crash.
>Fix:
None
>Release-Note:
>Audit-Trail:
>Unformatted: