[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#348792: libgcj6: string-to-double conversion can throw NullPointerException



Package: libgcj6
Version: 4.0.2-7
Severity: important

For some reason, attempting to convert decimal strings that correspond
to numbers below a certain threshold (between 4.24374e-214 and
4.24375e-214) to doubles (which should have an appreciably wider
range) ends up segfaulting within the guts of libgcj:

  $ cat DoubleConvTest.java
  class DoubleConvTest {
      public static void main(String[] args) {
          String s = args[0];
          System.out.print("in:  " + s + "\n");
          Double d = new Double(s);
          System.out.print("out: " + d + "\n");
      }
  }
  $ gcj -g --main=DoubleConvTest DoubleConvTest.java -o DoubleConvTest
  $ gdb --args ./DoubleConvTest 4e-214
  GNU gdb 6.4-debian
  Copyright 2005 Free Software Foundation, Inc.
  GDB is free software, covered by the GNU General Public License, and you are
  welcome to change it and/or distribute copies of it under certain conditions.
  Type "show copying" to see the conditions.
  There is absolutely no warranty for GDB.  Type "show warranty" for details.
  This GDB was configured as "x86_64-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".
  
  (gdb) run
  Starting program: /home/amu/tmp/DoubleConvTest 4e-214
  [Thread debugging using libthread_db enabled]
  [New Thread 46912531307856 (LWP 10872)]
  [New Thread 1082132832 (LWP 10875)]
  in:  4e-214
  
  Program received signal SIGSEGV, Segmentation fault.
  [Switching to Thread 46912531307856 (LWP 10872)]
  0x00002aaaab8dd4bb in _Jv_mult (ptr=0x7fffffaa9b30, a=0x7fffffaaa640, b=0xffff)
      at ../../../src/libjava/java/lang/mprec.c:328
  328     ../../../src/libjava/java/lang/mprec.c: No such file or directory.
          in ../../../src/libjava/java/lang/mprec.c
  (gdb) where
  #0  0x00002aaaab8dd4bb in _Jv_mult (ptr=0x7fffffaa9b30, a=0x7fffffaaa640, 
      b=0xffff) at ../../../src/libjava/java/lang/mprec.c:328
  #1  0x00002aaaab8dd64d in _Jv_pow5mult (ptr=0x7fffffaa9b30, b=0x7fffffaaa640, 
      k=13) at ../../../src/libjava/java/lang/mprec.c:432
  #2  0x00002aaaab8db0d9 in _Jv_strtod_r (ptr=0x7fffffaa9b30, 
      s00=<value optimized out>, se=0x7fffffaaacd8)
      at ../../../src/libjava/java/lang/strtod.c:473
  #3  0x00002aaaab8cc170 in java::lang::Double::parseDouble (str=0x2aaaaab82b40)
      at ../../../src/libjava/java/lang/natDouble.cc:208
  #4  0x00002aaaaba61563 in java.lang.Double.Double(java.lang.String) (
      this=0x2aaaaab43d30, s=0x2aaaaab82b40) at Double.java:140
  #5  0x0000000000401089 in DoubleConvTest.main(java.lang.String[]) (
      args=0x2aaaaab8afd8) at DoubleConvTest.java:5
  #6  0x00002aaaab8d1b40 in _Jv_ThreadRun (thread=0x2aaaaab51d90)
      at ../../../src/libjava/java/lang/natThread.cc:296
  #7  0x00002aaaab899398 in _Jv_RunMain (vm_args=<value optimized out>, 
      klass=0x5018a0, name=0x0, argc=2, argv=0x7fffffaaaf38, is_jar=false)
      at ../../../src/libjava/prims.cc:1356
  #8  0x0000000000400f68 in main (argc=2, argv=0x7fffffaaaf38)
      at /tmp/amu/_0/ccKhN7Bl.i:11
  (gdb) cont
  Continuing.
  Exception in thread "main" [New Thread 1090525536 (LWP 10876)]
  java.lang.NullPointerException
     at java.lang.Double.parseDouble(java.lang.String) (/usr/lib/libgcj.so.6.0.0)
     at java.lang.Double.Double(java.lang.String) (/usr/lib/libgcj.so.6.0.0)
     at DoubleConvTest.main(java.lang.String[]) (/home/amu/tmp/DoubleConvTest.java:5)
     at .main (/tmp/amu/_0/ccKhN7Bl.i:12)
     at .__libc_start_main (/lib/libc-2.3.5.so)
     at ._start (/home/amu/tmp/../sysdeps/x86_64/elf/start.S:116)
  
  Program exited with code 01.

The same lossage occurs when compiling to bytecode and running it with
gij.

This is causing kaffe to FTBFS on amd64, because it cannot compile the
definition of java.lang.Double.MIN_VALUE.  (Likewise for ikvm, but
that's been FTBFSing lately for unrelated reasons, so it's unclear how
much fixing this would help with that.)

-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (500, 'stable'), (1, 'sarge-unsupported')
Architecture: amd64 (x86_64)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.15
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)

Versions of packages libgcj6 depends on:
ii  gcj-4.0-base                  4.0.2-7    The GNU Compiler Collection (gcj b
ii  libc6                         2.3.5-12   GNU C Library: Shared libraries an
ii  libgcj-common                 1:4.0.2-7  Java runtime library (common files
ii  zlib1g                        1:1.2.3-9  compression library - runtime

Versions of packages libgcj6 recommends:
ii  libgcj6-jar                   4.0.2-7    Java runtime library for use with 

-- no debconf information



Reply to: