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]

FYI: Throwable initialization and security check fixups from GNUClasspath


Hi,

This merges the Throwable initialization and security check fixups from
GNU Classpath.

2004-09-26  Mark Wielaard  <mark@klomp.org>

        * java/lang/Throwable.java (StaticData.nl): Make package private.

        * java/lang/System.java (properties): Make package private.
        * java/lang/Throwable.java (StaticData.nl): Initialize through
        directly accessing System.properties.getProperty().

        * java/lang/Throwable.java (nl): Remove static field.
        (StaticData): New private static inner class.
        (stackTraceStringBuffer): Use StaticData.nl.

The new private static inner class makes sure that the nl field is only
initialized when a stack trace is actually printed. And by using the
System.properties field directly we avoid a security check.
Committed to mainline.

Cheers,

Mark
Index: java/lang/System.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/System.java,v
retrieving revision 1.19
diff -u -r1.19 System.java
--- java/lang/System.java	9 Sep 2004 10:19:29 -0000	1.19
+++ java/lang/System.java	26 Sep 2004 16:30:09 -0000
@@ -133,7 +133,7 @@
    */
   // Note that we use clone here and not new.  Some programs assume
   // that the system properties do not have a parent.
-  private static Properties properties
+  static Properties properties
     = (Properties) Runtime.defaultProperties.clone();
 
   /**
Index: java/lang/Throwable.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/Throwable.java,v
retrieving revision 1.16
diff -u -r1.16 Throwable.java
--- java/lang/Throwable.java	3 May 2004 19:52:29 -0000	1.16
+++ java/lang/Throwable.java	26 Sep 2004 16:30:09 -0000
@@ -1,5 +1,5 @@
 /* java.lang.Throwable -- Root class for all Exceptions and Errors
-   Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -396,7 +396,21 @@
     pw.print(stackTraceString());
   }
 
-  private static final String nl = System.getProperty("line.separator");
+  /*
+   * We use inner class to avoid a static initializer in this basic class.
+   */
+  private static class StaticData
+  {
+
+    final static String nl;
+
+    static
+    {
+      // Access package private properties field to prevent Security check.
+      nl = System.properties.getProperty("line.separator");
+    }
+  }
+
   // Create whole stack trace in a stringbuffer so we don't have to print
   // it line by line. This prevents printing multiple stack traces from
   // different threads to get mixed up when written to the same PrintWriter.
@@ -449,6 +463,7 @@
   private static void stackTraceStringBuffer(StringBuffer sb, String name,
 					StackTraceElement[] stack, int equal)
   {
+    String nl = StaticData.nl;
     // (finish) first line
     sb.append(name);
     sb.append(nl);

Attachment: signature.asc
Description: This is a digitally signed message part


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