Hi,
I've checked in the attached patch to fix the fact that we're
incorrectly checking for the "charsetProvider" runtime permission when
instantiating the built in providers.
Regards,
Jeroen
2005-01-13 Jeroen Frijters <[EMAIL PROTECTED]>
* gnu/java/nio/charset/Provider.java: Added comment about its
special relation with CharsetProvider.
(static): Removed.
* gnu/java/nio/charset/iconv/IconvProvider.java: Added comment
about
its special relation with CharsetProvider.
(static): Removed.
* java/nio/charset/spi/CharsetProvider.java
(CharsetProvider): Add special case to skip security check for
built in providers.
Index: gnu/java/nio/charset/Provider.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/java/nio/charset/Provider.java,v
retrieving revision 1.7
diff -u -r1.7 Provider.java
--- gnu/java/nio/charset/Provider.java 22 Dec 2005 16:55:02 -0000 1.7
+++ gnu/java/nio/charset/Provider.java 13 Jan 2006 07:30:49 -0000
@@ -1,5 +1,5 @@
/* Provider.java --
- Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,6 +49,11 @@
* Charset provider for the required charsets. Used by
* [EMAIL PROTECTED] Charset#charsetForName} and * [EMAIL PROTECTED]
Charset#availableCharsets}.
*
+ * Note: This class is a privileged class, because it can be instantiated
without
+ * requiring the RuntimePermission("charsetProvider"). There is a check in
+ * java.nio.charset.spi.CharsetProvider to skip the security check if the
provider
+ * is an instance of this class.
+ *
* @author Jesse Rosenstock
* @author Robert Schuster ([EMAIL PROTECTED])
* @see Charset
@@ -57,14 +62,6 @@
{
private static Provider singleton;
- static
- {
- synchronized (Provider.class)
- {
- singleton = null;
- }
- }
-
/**
* Map from charset name to charset canonical name. The strings
* are all lower-case to allow case-insensitive retrieval of
Index: gnu/java/nio/charset/iconv/IconvProvider.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/gnu/java/nio/charset/iconv/IconvProvider.java,v
retrieving revision 1.3
diff -u -r1.3 IconvProvider.java
--- gnu/java/nio/charset/iconv/IconvProvider.java 7 Nov 2005 22:08:33
-0000 1.3
+++ gnu/java/nio/charset/iconv/IconvProvider.java 13 Jan 2006 07:30:46
-0000
@@ -1,5 +1,5 @@
/* IconvProvider.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,20 +48,17 @@
/**
* Charset provider wrapping iconv.
*
+ * Note: This class is a privileged class, because it can be instantiated
without
+ * requiring the RuntimePermission("charsetProvider"). There is a check in
+ * java.nio.charset.spi.CharsetProvider to skip the security check if the
provider
+ * is an instance of this class.
+ *
* @author Sven de Marothy
*/
public final class IconvProvider extends CharsetProvider
{
private static IconvProvider singleton;
- static
- {
- synchronized (IconvProvider.class)
- {
- singleton = null;
- }
- }
-
// Declaring the construtor public may violate the use of singleton.
// But it must be public so that an instance of this class can be
// created by Class.newInstance(), which is the case when this provider is
Index: java/nio/charset/spi/CharsetProvider.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/java/nio/charset/spi/CharsetProvider.java,v
retrieving revision 1.4
diff -u -r1.4 CharsetProvider.java
--- java/nio/charset/spi/CharsetProvider.java 2 Jul 2005 20:32:40 -0000
1.4
+++ java/nio/charset/spi/CharsetProvider.java 13 Jan 2006 07:30:44 -0000
@@ -1,5 +1,5 @@
/* CharsetProvider.java -- charset service provider interface
- Copyright (C) 2002 Free Software Foundation
+ Copyright (C) 2002, 2006 Free Software Foundation
This file is part of GNU Classpath.
@@ -67,8 +67,12 @@
*/
protected CharsetProvider()
{
+ // We only do the security check for custom providers, not for the
+ // built in ones.
SecurityManager s = System.getSecurityManager();
- if (s != null)
+ if (s != null &&
+ ! (this instanceof gnu.java.nio.charset.Provider
+ || this instanceof gnu.java.nio.charset.iconv.IconvProvider))
s.checkPermission(new RuntimePermission("charsetProvider"));
}
_______________________________________________
Classpath-patches mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/classpath-patches