This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch: FYI: important memory-trashing fix


I'm checking this in on the trunk.

Tom Fitzsimmons' test case pointed this out.  
It turns out that in many cases we were passing the wrong length to
JvGetStringUTFRegion.  Perhaps we should add a new API that doesn't
take a length argument at all, since that seems to be the most common
use by far.

Tom

Index: ChangeLog
from  Tom Tromey  <tromey@redhat.com>

	* jni.cc (_Jv_JNI_GetStringUTFChars): Pass length of string to
	JvGetStringUTFRegion.
	* java/lang/natPosixProcess.cc (new_string): Pass length of string
	to JvGetStringUTFRegion.
	* java/lang/natDouble.cc (parseDouble): Pass length of string to
	JvGetStringUTFRegion.
	* java/lang/natWin32Process.cc (startProcess): Pass length of
	string to JvGetStringUTFRegion.
	* java/lang/natClass.cc (forName): Pass length of string to
	JvGetStringUTFRegion.
	* gnu/gcj/runtime/natNameFinder.cc (getExternalLabel): Pass length
	of string to JvGetStringUTFRegion.
	* gnu/gcj/convert/natIconv.cc (init): Pass length of string to
	JvGetStringUTFRegion.
	* gnu/awt/gtk/natGtkLabelPeer.cc (setText): Pass length of string
	to JvGetStringUTFRegion.
	* gnu/awt/gtk/natGtkButtonPeer.cc (setLabel): Pass length of
	string to JvGetStringUTFRegion.

Index: jni.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni.cc,v
retrieving revision 1.78
diff -u -r1.78 jni.cc
--- jni.cc 12 Nov 2003 05:56:43 -0000 1.78
+++ jni.cc 14 Nov 2003 01:43:36 -0000
@@ -1303,7 +1303,7 @@
   try
     {
       char *r = (char *) _Jv_Malloc (len + 1);
-      JvGetStringUTFRegion (string, 0, len, r);
+      JvGetStringUTFRegion (string, 0, string->length(), r);
       r[len] = '\0';
 
       if (isCopy)
Index: gnu/awt/gtk/natGtkButtonPeer.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/awt/gtk/natGtkButtonPeer.cc,v
retrieving revision 1.1
diff -u -r1.1 natGtkButtonPeer.cc
--- gnu/awt/gtk/natGtkButtonPeer.cc 12 Jan 2001 23:08:23 -0000 1.1
+++ gnu/awt/gtk/natGtkButtonPeer.cc 14 Nov 2003 01:43:36 -0000
@@ -19,7 +19,7 @@
   // FIXME: this can allocate an unbounded amount.  Should use heap
   // even though it is slower.
   if (label)
-    JvGetStringUTFRegion (label, 0, len, buf);
+    JvGetStringUTFRegion (label, 0, label->length(), buf);
   buf[len] = '\0';
   // The button child is a label.
   GtkBin *bin = GTK_BIN (ptr);
Index: gnu/awt/gtk/natGtkLabelPeer.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/awt/gtk/natGtkLabelPeer.cc,v
retrieving revision 1.1
diff -u -r1.1 natGtkLabelPeer.cc
--- gnu/awt/gtk/natGtkLabelPeer.cc 12 Jan 2001 23:08:23 -0000 1.1
+++ gnu/awt/gtk/natGtkLabelPeer.cc 14 Nov 2003 01:43:36 -0000
@@ -20,7 +20,7 @@
   // even though it is slower.
   char buf[len + 1];
   if (text)
-    JvGetStringUTFRegion (text, 0, len, buf);
+    JvGetStringUTFRegion (text, 0, text->length(), buf);
   buf[len] = '\0';
   gtk_label_set_text (GTK_LABEL (ptr), buf);
 }
Index: gnu/gcj/convert/natIconv.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/convert/natIconv.cc,v
retrieving revision 1.15
diff -u -r1.15 natIconv.cc
--- gnu/gcj/convert/natIconv.cc 29 Jul 2003 16:38:48 -0000 1.15
+++ gnu/gcj/convert/natIconv.cc 14 Nov 2003 01:43:36 -0000
@@ -42,7 +42,7 @@
 #ifdef HAVE_ICONV
   jsize len = _Jv_GetStringUTFLength (encoding);
   char buffer[len + 1];
-  _Jv_GetStringUTFRegion (encoding, 0, len, buffer);
+  _Jv_GetStringUTFRegion (encoding, 0, encoding->length(), buffer);
   buffer[len] = '\0';
 
   iconv_t h = iconv_open ("UCS-2", buffer);
@@ -142,7 +142,7 @@
 #ifdef HAVE_ICONV
   jsize len = _Jv_GetStringUTFLength (encoding);
   char buffer[len + 1];
-  _Jv_GetStringUTFRegion (encoding, 0, len, buffer);
+  _Jv_GetStringUTFRegion (encoding, 0, encoding->length(), buffer);
   buffer[len] = '\0';
 
   iconv_t h = iconv_open (buffer, "UCS-2");
Index: gnu/gcj/runtime/natNameFinder.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/gcj/runtime/natNameFinder.cc,v
retrieving revision 1.4
diff -u -r1.4 natNameFinder.cc
--- gnu/gcj/runtime/natNameFinder.cc 10 Mar 2003 19:45:30 -0000 1.4
+++ gnu/gcj/runtime/natNameFinder.cc 14 Nov 2003 01:43:36 -0000
@@ -1,6 +1,6 @@
 // natNameFinder.cc - native helper methods for NameFinder.java
 
-/* Copyright (C) 2002  Free Software Foundation, Inc
+/* Copyright (C) 2002, 2003  Free Software Foundation, Inc
 
    This file is part of libgcj.
 
@@ -56,7 +56,7 @@
   char *newName = (char *) JvMalloc (pfxLen + nameLen + 1);
   *(newName + 0) = '\0';
   strcpy (newName, LABEL_PREFIX);
-  JvGetStringUTFRegion (name, 0, nameLen, newName + pfxLen);
+  JvGetStringUTFRegion (name, 0, name->length(), newName + pfxLen);
   *(newName + pfxLen + nameLen) = '\0';
   return JvNewStringLatin1 (newName);
 }
Index: java/lang/natClass.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/natClass.cc,v
retrieving revision 1.72
diff -u -r1.72 natClass.cc
--- java/lang/natClass.cc 4 Nov 2003 05:27:10 -0000 1.72
+++ java/lang/natClass.cc 14 Nov 2003 01:43:37 -0000
@@ -71,7 +71,7 @@
 
   jsize length = _Jv_GetStringUTFLength (className);
   char buffer[length];
-  _Jv_GetStringUTFRegion (className, 0, length, buffer);
+  _Jv_GetStringUTFRegion (className, 0, className->length(), buffer);
 
   _Jv_Utf8Const *name = _Jv_makeUtf8Const (buffer, length);
 
Index: java/lang/natDouble.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/natDouble.cc,v
retrieving revision 1.16
diff -u -r1.16 natDouble.cc
--- java/lang/natDouble.cc 15 Apr 2002 03:11:12 -0000 1.16
+++ java/lang/natDouble.cc 14 Nov 2003 01:43:37 -0000
@@ -1,6 +1,6 @@
 // natDouble.cc - Implementation of java.lang.Double native methods.
 
-/* Copyright (C) 1998, 1999, 2000, 2001  Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001, 2003  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -183,7 +183,7 @@
     {
       // Note that UTF can expand 3x.
       char *data = (char *) __builtin_alloca (3 * length + 1);
-      jsize blength = _Jv_GetStringUTFRegion (str, start, length, data);
+      jsize blength = _Jv_GetStringUTFRegion (str, start, str->length(), data);
       data[blength] = 0; 
 
       struct _Jv_reent reent;  
Index: java/lang/natPosixProcess.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/natPosixProcess.cc,v
retrieving revision 1.14
diff -u -r1.14 natPosixProcess.cc
--- java/lang/natPosixProcess.cc 14 Aug 2002 19:53:54 -0000 1.14
+++ java/lang/natPosixProcess.cc 14 Nov 2003 01:43:37 -0000
@@ -1,6 +1,6 @@
 // natPosixProcess.cc - Native side of POSIX process code.
 
-/* Copyright (C) 1998, 1999, 2000, 2002  Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2002, 2003  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -82,7 +82,7 @@
 {
   jsize s = _Jv_GetStringUTFLength (string);
   char *buf = (char *) _Jv_Malloc (s + 1);
-  _Jv_GetStringUTFRegion (string, 0, s, buf);
+  _Jv_GetStringUTFRegion (string, 0, string->length(), buf);
   buf[s] = '\0';
   return buf;
 }
Index: java/lang/natWin32Process.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/natWin32Process.cc,v
retrieving revision 1.7
diff -u -r1.7 natWin32Process.cc
--- java/lang/natWin32Process.cc 7 Nov 2003 03:16:49 -0000 1.7
+++ java/lang/natWin32Process.cc 14 Nov 2003 01:43:37 -0000
@@ -230,7 +230,7 @@
       if (i > 0)
         *cmdLineCurPos++ = ' ';
       jsize s = _Jv_GetStringUTFLength (elts[i]);
-      _Jv_GetStringUTFRegion (elts[i], 0, s, cmdLineCurPos);
+      _Jv_GetStringUTFRegion (elts[i], 0, elts[i]->length(), cmdLineCurPos);
       cmdLineCurPos += s;
     }
   *cmdLineCurPos = '\0';
@@ -251,7 +251,7 @@
       for (int i = 0; i < envp->length; ++i)
         {
           jsize s = _Jv_GetStringUTFLength (elts[i]);
-          _Jv_GetStringUTFRegion (elts[i], 0, s, (env + j));
+          _Jv_GetStringUTFRegion (elts[i], 0, elts[i]->length(), (env + j));
 
           j += s;
           *(env + j) = '\0';


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]