[Fwd: Patch SharedLibLoader new exception and library path termination]

Steve Pribyl steve@netfuel.com
Tue Jul 8 14:53:00 GMT 2003


Here it is with a ChangeLog

Did not null terminate library path name, causing library to not be found.
Added UnsatisfiedLinkError if dlopen returned null.

Index: libjava/ChangeLog
===================================================================
RCS file: /cvsroot/gcc/gcc/libjava/ChangeLog,v
retrieving revision 1.2017
diff -c -3 -p -r1.2017 ChangeLog
*** libjava/ChangeLog   8 Jul 2003 04:49:16 -0000       1.2017
--- libjava/ChangeLog   8 Jul 2003 14:44:00 -0000
***************
*** 1,3 ****
--- 1,7 ----
+ 2003-07-08  Steve Pribyl <steve@netfuel.com.>
+         * gnu/gcj/runtime/natSharedLibLoader.cc: Added 
UnsatisfiedLinkError to SharedLibLoader if dlopen returned null
+       * gnu.gcj.runtime.SharedLibLoader: Corrected unterminated string 
in library name when calling dlopen
+
   2003-07-07  Adam Megacz <adam@xwt.org>

           * posix.cc: added #include<stdio.h>
Index: libjava/gnu/gcj/runtime/SharedLibLoader.java
===================================================================
RCS file: /cvsroot/gcc/gcc/libjava/gnu/gcj/runtime/SharedLibLoader.java,v
retrieving revision 1.1
diff -c -3 -p -r1.1 SharedLibLoader.java
*** libjava/gnu/gcj/runtime/SharedLibLoader.java        29 Sep 2001 
19:16:26 -0000      1.1
--- libjava/gnu/gcj/runtime/SharedLibLoader.java        8 Jul 2003 
14:44:00 -0000
*************** public class SharedLibLoader extends Cla
*** 45,56 ****
       init(libname, 0);
     }

!   void init(String libname, int flags)
!   {
!     init(libname.getBytes(), flags);
!   }
!
!   native void init(byte[] libname, int flags);

     public Class loadClass(String name)
       throws ClassNotFoundException
--- 45,51 ----
       init(libname, 0);
     }

!   native void init(String libname, int flags);

     public Class loadClass(String name)
       throws ClassNotFoundException
Index: libjava/gnu/gcj/runtime/natSharedLibLoader.cc
===================================================================
RCS file: /cvsroot/gcc/gcc/libjava/gnu/gcj/runtime/natSharedLibLoader.cc,v
retrieving revision 1.2
diff -c -3 -p -r1.2 natSharedLibLoader.cc
*** libjava/gnu/gcj/runtime/natSharedLibLoader.cc       24 Oct 2001 
07:00:19 -0000      1.2
--- libjava/gnu/gcj/runtime/natSharedLibLoader.cc       8 Jul 2003 
14:44:00 -0000
*************** details.  */
*** 14,19 ****
--- 14,20 ----
   #include <gnu/gcj/runtime/SharedLibLoader.h>
   #include <java/io/IOException.h>
   #include <java/lang/UnsupportedOperationException.h>
+ #include <java/lang/UnsatisfiedLinkError.h>

   #ifdef HAVE_DLOPEN
   #include <dlfcn.h>
*************** struct SharedLibDummy
*** 45,54 ****
   #endif

   void
! gnu::gcj::runtime::SharedLibLoader::init(jbyteArray libname, jint flags)
   {
   #ifdef HAVE_DLOPEN
!   char *lname = (char*) elements(libname);
     if (flags==0)
       flags = RTLD_LAZY;
     JvSynchronize dummy1(&java::lang::Class::class$);
--- 46,59 ----
   #endif

   void
! gnu::gcj::runtime::SharedLibLoader::init(jstring libname, jint flags)
   {
   #ifdef HAVE_DLOPEN
!   jint len = _Jv_GetStringUTFLength (libname);
!   char lname[len + 1];
!   JvGetStringUTFRegion (libname, 0, libname->length(), lname);
!   lname[len] = '\0';
!
     if (flags==0)
       flags = RTLD_LAZY;
     JvSynchronize dummy1(&java::lang::Class::class$);
*************** gnu::gcj::runtime::SharedLibLoader::init
*** 59,68 ****
     if (h == NULL)
       {
         const char *msg = dlerror();
       }
     handler = (gnu::gcj::RawData*) h;
   #else
!   const char *msg = "ShareedLibLoader is not supported on this platform";
     throw new 
java::lang::UnsupportedOperationException(JvNewStringLatin1(msg));
   #endif
   }
--- 64,77 ----
     if (h == NULL)
       {
         const char *msg = dlerror();
+       jstring str = JvNewStringLatin1 (lname);
+       str = str->concat (JvNewStringLatin1 (": "));
+       str = str->concat (JvNewStringLatin1 (msg));
+       throw new java::lang::UnsatisfiedLinkError (str);
       }
     handler = (gnu::gcj::RawData*) h;
   #else
!   const char *msg = "SharedLibLoader is not supported on this platform";
     throw new 
java::lang::UnsupportedOperationException(JvNewStringLatin1(msg));
   #endif
   }


-- 
Steve Pribyl
Steve AT NetFuel dot com
Computer Infrastructure Practitioner



More information about the Java-patches mailing list