--- a/jdk/make/sun/net/FILES_java.gmk Thu May 07 13:18:12 2009 -0700
+++ b/jdk/make/sun/net/FILES_java.gmk Fri Jun 12 10:54:48 2009 -0700
@@ -24,6 +24,7 @@
#
FILES_java = \
+ sun/net/ApplicationProxy.java \
sun/net/InetAddressCachePolicy.java \
sun/net/URLCanonicalizer.java \
sun/net/NetworkClient.java \
--- a/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReaderSpi.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReaderSpi.java Fri Jun 12 10:54:48 2009 -0700
@@ -51,7 +51,7 @@
entensions,
mimeType,
"com.sun.imageio.plugins.bmp.BMPImageReader",
- STANDARD_INPUT_TYPE,
+ new Class[] { ImageInputStream.class },
writerSpiNames,
false,
null, null, null, null,
--- a/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageWriterSpi.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageWriterSpi.java Fri Jun 12 10:54:48 2009 -0700
@@ -32,6 +32,7 @@
import javax.imageio.spi.ImageWriterSpi;
import javax.imageio.spi.ServiceRegistry;
import javax.imageio.spi.IIORegistry;
+import javax.imageio.stream.ImageOutputStream;
import javax.imageio.ImageWriter;
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.IIOException;
@@ -55,7 +56,7 @@
entensions,
mimeType,
"com.sun.imageio.plugins.bmp.BMPImageWriter",
- STANDARD_OUTPUT_TYPE,
+ new Class[] { ImageOutputStream.class },
readerSpiNames,
false,
null, null, null, null,
--- a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageReaderSpi.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageReaderSpi.java Fri Jun 12 10:54:48 2009 -0700
@@ -60,7 +60,7 @@
suffixes,
MIMETypes,
readerClassName,
- STANDARD_INPUT_TYPE,
+ new Class[] { ImageInputStream.class },
writerSpiNames,
true,
GIFStreamMetadata.nativeMetadataFormatName,
--- a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageWriterSpi.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageWriterSpi.java Fri Jun 12 10:54:48 2009 -0700
@@ -31,6 +31,7 @@
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.ImageWriter;
import javax.imageio.spi.ImageWriterSpi;
+import javax.imageio.stream.ImageOutputStream;
import com.sun.imageio.plugins.common.PaletteBuilder;
public class GIFImageWriterSpi extends ImageWriterSpi {
@@ -59,7 +60,7 @@
suffixes,
MIMETypes,
writerClassName,
- STANDARD_OUTPUT_TYPE,
+ new Class[] { ImageOutputStream.class },
readerSpiNames,
true,
GIFWritableStreamMetadata.NATIVE_FORMAT_NAME,
--- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java Fri Jun 12 10:54:48 2009 -0700
@@ -46,7 +46,7 @@
JPEG.suffixes,
JPEG.MIMETypes,
"com.sun.imageio.plugins.jpeg.JPEGImageReader",
- STANDARD_INPUT_TYPE,
+ new Class[] { ImageInputStream.class },
writerSpiNames,
true,
JPEG.nativeStreamMetadataFormatName,
--- a/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java Fri Jun 12 10:54:48 2009 -0700
@@ -28,6 +28,7 @@
import javax.imageio.spi.ImageWriterSpi;
import javax.imageio.spi.ServiceRegistry;
import javax.imageio.spi.IIORegistry;
+import javax.imageio.stream.ImageOutputStream;
import javax.imageio.ImageWriter;
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.IIOException;
@@ -49,7 +50,7 @@
JPEG.suffixes,
JPEG.MIMETypes,
"com.sun.imageio.plugins.jpeg.JPEGImageWriter",
- STANDARD_OUTPUT_TYPE,
+ new Class[] { ImageOutputStream.class },
readerSpiNames,
true,
JPEG.nativeStreamMetadataFormatName,
--- a/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGImageReaderSpi.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGImageReaderSpi.java Fri Jun 12 10:54:48 2009 -0700
@@ -60,7 +60,7 @@
suffixes,
MIMETypes,
readerClassName,
- STANDARD_INPUT_TYPE,
+ new Class[] { ImageInputStream.class },
writerSpiNames,
false,
null, null,
--- a/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGImageWriterSpi.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGImageWriterSpi.java Fri Jun 12 10:54:48 2009 -0700
@@ -34,6 +34,7 @@
import javax.imageio.metadata.IIOMetadataFormat;
import javax.imageio.metadata.IIOMetadataFormatImpl;
import javax.imageio.spi.ImageWriterSpi;
+import javax.imageio.stream.ImageOutputStream;
public class PNGImageWriterSpi extends ImageWriterSpi {
@@ -61,7 +62,7 @@
suffixes,
MIMETypes,
writerClassName,
- STANDARD_OUTPUT_TYPE,
+ new Class[] { ImageOutputStream.class },
readerSpiNames,
false,
null, null,
--- a/jdk/src/share/classes/com/sun/imageio/plugins/wbmp/WBMPImageReaderSpi.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/imageio/plugins/wbmp/WBMPImageReaderSpi.java Fri Jun 12 10:54:48 2009 -0700
@@ -51,7 +51,7 @@
entensions,
mimeType,
"com.sun.imageio.plugins.wbmp.WBMPImageReader",
- STANDARD_INPUT_TYPE,
+ new Class[] { ImageInputStream.class },
writerSpiNames,
true,
null, null, null, null,
--- a/jdk/src/share/classes/com/sun/imageio/plugins/wbmp/WBMPImageWriterSpi.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/imageio/plugins/wbmp/WBMPImageWriterSpi.java Fri Jun 12 10:54:48 2009 -0700
@@ -28,6 +28,7 @@
import javax.imageio.spi.ImageWriterSpi;
import javax.imageio.spi.ServiceRegistry;
import javax.imageio.spi.IIORegistry;
+import javax.imageio.stream.ImageOutputStream;
import javax.imageio.ImageWriter;
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.IIOException;
@@ -54,7 +55,7 @@
entensions,
mimeType,
"com.sun.imageio.plugins.wbmp.WBMPImageWriter",
- STANDARD_OUTPUT_TYPE,
+ new Class[] { ImageOutputStream.class },
readerSpiNames,
true,
null, null, null, null,
--- a/jdk/src/share/classes/com/sun/imageio/stream/StreamCloser.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/imageio/stream/StreamCloser.java Fri Jun 12 10:54:48 2009 -0700
@@ -43,35 +43,35 @@
*/
public class StreamCloser {
- private static WeakHashMap<ImageInputStream, Object> toCloseQueue;
+ private static WeakHashMap<CloseAction, Object> toCloseQueue;
private static Thread streamCloser;
- public static void addToQueue(ImageInputStream iis) {
+ public static void addToQueue(CloseAction ca) {
synchronized (StreamCloser.class) {
if (toCloseQueue == null) {
toCloseQueue =
- new WeakHashMap<ImageInputStream, Object>();
+ new WeakHashMap<CloseAction, Object>();
}
- toCloseQueue.put(iis, null);
+ toCloseQueue.put(ca, null);
if (streamCloser == null) {
final Runnable streamCloserRunnable = new Runnable() {
public void run() {
if (toCloseQueue != null) {
synchronized (StreamCloser.class) {
- Set<ImageInputStream> set =
+ Set<CloseAction> set =
toCloseQueue.keySet();
// Make a copy of the set in order to avoid
// concurrent modification (the is.close()
// will in turn call removeFromQueue())
- ImageInputStream[] streams =
- new ImageInputStream[set.size()];
- streams = set.toArray(streams);
- for (ImageInputStream is : streams) {
- if (is != null) {
+ CloseAction[] actions =
+ new CloseAction[set.size()];
+ actions = set.toArray(actions);
+ for (CloseAction ca : actions) {
+ if (ca != null) {
try {
- is.close();
+ ca.performAction();
} catch (IOException e) {
}
}
@@ -106,10 +106,28 @@
}
}
- public static void removeFromQueue(ImageInputStream iis) {
+ public static void removeFromQueue(CloseAction ca) {
synchronized (StreamCloser.class) {
if (toCloseQueue != null) {
- toCloseQueue.remove(iis);
+ toCloseQueue.remove(ca);
+ }
+ }
+ }
+
+ public static CloseAction createCloseAction(ImageInputStream iis) {
+ return new CloseAction(iis);
+ }
+
+ public static final class CloseAction {
+ private ImageInputStream iis;
+
+ private CloseAction(ImageInputStream iis) {
+ this.iis = iis;
+ }
+
+ public void performAction() throws IOException {
+ if (iis != null) {
+ iis.close();
}
}
}
--- a/jdk/src/share/classes/com/sun/media/sound/JDK13Services.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/media/sound/JDK13Services.java Fri Jun 12 10:54:48 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -41,6 +41,15 @@
import javax.sound.midi.spi.SoundbankReader;
import javax.sound.midi.spi.MidiDeviceProvider;
+import javax.sound.midi.Receiver;
+import javax.sound.midi.Sequencer;
+import javax.sound.midi.Synthesizer;
+import javax.sound.midi.Transmitter;
+import javax.sound.sampled.Clip;
+import javax.sound.sampled.Port;
+import javax.sound.sampled.SourceDataLine;
+import javax.sound.sampled.TargetDataLine;
+
/**
* JDK13Services uses the Service class in JDK 1.3
@@ -186,6 +195,16 @@
If the property is not set, null is returned.
*/
private static synchronized String getDefaultProvider(Class typeClass) {
+ if (!SourceDataLine.class.equals(typeClass)
+ && !TargetDataLine.class.equals(typeClass)
+ && !Clip.class.equals(typeClass)
+ && !Port.class.equals(typeClass)
+ && !Receiver.class.equals(typeClass)
+ && !Transmitter.class.equals(typeClass)
+ && !Synthesizer.class.equals(typeClass)
+ && !Sequencer.class.equals(typeClass)) {
+ return null;
+ }
String value;
String propertyName = typeClass.getName();
value = JSSecurityManager.getProperty(propertyName);
--- a/jdk/src/share/classes/com/sun/media/sound/JSSecurityManager.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/media/sound/JSSecurityManager.java Fri Jun 12 10:54:48 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -283,28 +283,37 @@
static List getProviders(final Class providerClass) {
- PrivilegedAction action = new PrivilegedAction() {
- public Object run() {
- List p = new ArrayList();
- Iterator ps = Service.providers(providerClass);
- while (ps.hasNext()) {
- try {
- Object provider = ps.next();
- if (providerClass.isInstance(provider)) {
- // $$mp 2003-08-22
- // Always adding at the beginning reverses the
- // order of the providers. So we no longer have
- // to do this in AudioSystem and MidiSystem.
- p.add(0, provider);
- }
- } catch (Throwable t) {
- //$$fb 2002-11-07: do not fail on SPI not found
- if (Printer.err) t.printStackTrace();
- } }
- return p;
+ List p = new ArrayList();
+ // Service.providers(Class) just creates "lazy" iterator instance,
+ // so it doesn't require do be called from privileged section
+ final Iterator ps = Service.providers(providerClass);
+
+ // the iterator's hasNext() method looks through classpath for
+ // the provider class names, so it requires read permissions
+ PrivilegedAction<Boolean> hasNextAction = new PrivilegedAction<Boolean>() {
+ public Boolean run() {
+ return ps.hasNext();
+ }
+ };
+
+ while (AccessController.doPrivileged(hasNextAction)) {
+ try {
+ // the iterator's next() method creates instances of the
+ // providers and it should be called in the current security
+ // context
+ Object provider = ps.next();
+ if (providerClass.isInstance(provider)) {
+ // $$mp 2003-08-22
+ // Always adding at the beginning reverses the
+ // order of the providers. So we no longer have
+ // to do this in AudioSystem and MidiSystem.
+ p.add(0, provider);
}
- };
- List providers = (List) AccessController.doPrivileged(action);
- return providers;
+ } catch (Throwable t) {
+ //$$fb 2002-11-07: do not fail on SPI not found
+ if (Printer.err) t.printStackTrace();
+ }
+ }
+ return p;
}
}
--- a/jdk/src/share/classes/com/sun/media/sound/StandardMidiFileWriter.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/com/sun/media/sound/StandardMidiFileWriter.java Fri Jun 12 10:54:48 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -82,7 +82,7 @@
/**
* MIDI parser types
*/
- public static final int types[] = {
+ private static final int types[] = {
MIDI_TYPE_0,
MIDI_TYPE_1
};
--- a/jdk/src/share/classes/java/net/Socket.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/java/net/Socket.java Fri Jun 12 10:54:48 2009 -0700
@@ -118,7 +118,7 @@
if (proxy == null) {
throw new IllegalArgumentException("Invalid Proxy");
}
- Proxy p = proxy == Proxy.NO_PROXY ? Proxy.NO_PROXY : new Proxy(proxy.type(), proxy.address());
+ Proxy p = proxy == Proxy.NO_PROXY ? Proxy.NO_PROXY : sun.net.ApplicationProxy.create(proxy);
if (p.type() == Proxy.Type.SOCKS) {
SecurityManager security = System.getSecurityManager();
InetSocketAddress epoint = (InetSocketAddress) p.address();
--- a/jdk/src/share/classes/java/net/SocksSocketImpl.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/java/net/SocksSocketImpl.java Fri Jun 12 10:54:48 2009 -0700
@@ -47,6 +47,9 @@
private Socket cmdsock = null;
private InputStream cmdIn = null;
private OutputStream cmdOut = null;
+ /* true if the Proxy has been set programatically */
+ private boolean applicationSetProxy; /* false */
+
SocksSocketImpl() {
// Nothing needed
@@ -64,6 +67,7 @@
// Use getHostString() to avoid reverse lookups
server = ad.getHostString();
port = ad.getPort();
+ applicationSetProxy = true;
}
}
@@ -165,8 +169,7 @@
throw (IOException) pae.getException();
}
} else {
- userName = java.security.AccessController.doPrivileged(
- new sun.security.action.GetPropertyAction("user.name"));
+ userName = getUserName();
}
}
if (userName == null)
@@ -267,8 +270,7 @@
out.write((endpoint.getPort() >> 8) & 0xff);
out.write((endpoint.getPort() >> 0) & 0xff);
out.write(endpoint.getAddress().getAddress());
- String userName = java.security.AccessController.doPrivileged(
- new sun.security.action.GetPropertyAction("user.name"));
+ String userName = getUserName();
try {
out.write(userName.getBytes("ISO-8859-1"));
} catch (java.io.UnsupportedEncodingException uee) {
@@ -588,8 +590,7 @@
out.write((super.getLocalPort() >> 8) & 0xff);
out.write((super.getLocalPort() >> 0) & 0xff);
out.write(addr1);
- String userName = java.security.AccessController.doPrivileged(
- new sun.security.action.GetPropertyAction("user.name"));
+ String userName = getUserName();
try {
out.write(userName.getBytes("ISO-8859-1"));
} catch (java.io.UnsupportedEncodingException uee) {
@@ -1052,4 +1053,16 @@
super.close();
}
+ private String getUserName() {
+ String userName = "";
+ if (applicationSetProxy) {
+ try {
+ userName = System.getProperty("user.name");
+ } catch (SecurityException se) { /* swallow Exception */ }
+ } else {
+ userName = java.security.AccessController.doPrivileged(
+ new sun.security.action.GetPropertyAction("user.name"));
+ }
+ return userName;
+ }
}
--- a/jdk/src/share/classes/java/net/URL.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/java/net/URL.java Fri Jun 12 10:54:48 2009 -0700
@@ -1005,7 +1005,7 @@
}
// Create a copy of Proxy as a security measure
- Proxy p = proxy == Proxy.NO_PROXY ? Proxy.NO_PROXY : new Proxy(proxy.type(), proxy.address());
+ Proxy p = proxy == Proxy.NO_PROXY ? Proxy.NO_PROXY : sun.net.ApplicationProxy.create(proxy);
SecurityManager sm = System.getSecurityManager();
if (p.type() != Proxy.Type.DIRECT && sm != null) {
InetSocketAddress epoint = (InetSocketAddress) p.address();
--- a/jdk/src/share/classes/javax/imageio/plugins/bmp/BMPImageWriteParam.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/javax/imageio/plugins/bmp/BMPImageWriteParam.java Fri Jun 12 10:54:48 2009 -0700
@@ -78,7 +78,7 @@
super(locale);
// Set compression types ("BI_RGB" denotes uncompressed).
- compressionTypes = BMPConstants.compressionTypeNames;
+ compressionTypes = BMPConstants.compressionTypeNames.clone();
// Set compression flag.
canWriteCompressed = true;
--- a/jdk/src/share/classes/javax/imageio/spi/ImageReaderSpi.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/javax/imageio/spi/ImageReaderSpi.java Fri Jun 12 10:54:48 2009 -0700
@@ -77,7 +77,10 @@
* A single-element array, initially containing
* <code>ImageInputStream.class</code>, to be returned from
* <code>getInputTypes</code>.
+ * @deprecated Instead of using this field, directly create
+ * the equivalent array <code>{ ImageInputStream.class }<code>.
*/
+ @Deprecated
public static final Class[] STANDARD_INPUT_TYPE =
{ ImageInputStream.class };
@@ -227,7 +230,11 @@
throw new IllegalArgumentException
("inputTypes.length == 0!");
}
- this.inputTypes = (Class[])inputTypes.clone();
+
+ this.inputTypes = (inputTypes == STANDARD_INPUT_TYPE) ?
+ new Class<?>[] { ImageInputStream.class } :
+ inputTypes.clone();
+
// If length == 0, leave it null
if (writerSpiNames != null && writerSpiNames.length > 0) {
this.writerSpiNames = (String[])writerSpiNames.clone();
--- a/jdk/src/share/classes/javax/imageio/spi/ImageWriterSpi.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/javax/imageio/spi/ImageWriterSpi.java Fri Jun 12 10:54:48 2009 -0700
@@ -77,9 +77,12 @@
/**
* A single-element array, initially containing
- * <code>ImageInputStream.class</code>, to be returned from
- * <code>getInputTypes</code>.
+ * <code>ImageOutputStream.class</code>, to be returned from
+ * <code>getOutputTypes</code>.
+ * @deprecated Instead of using this field, directly create
+ * the equivalent array <code>{ ImageOutputStream.class }<code>.
*/
+ @Deprecated
public static final Class[] STANDARD_OUTPUT_TYPE =
{ ImageOutputStream.class };
@@ -228,7 +231,11 @@
throw new IllegalArgumentException
("outputTypes.length == 0!");
}
- this.outputTypes = (Class[])outputTypes.clone();
+
+ this.outputTypes = (outputTypes == STANDARD_OUTPUT_TYPE) ?
+ new Class<?>[] { ImageOutputStream.class } :
+ outputTypes.clone();
+
// If length == 0, leave it null
if (readerSpiNames != null && readerSpiNames.length > 0) {
this.readerSpiNames = (String[])readerSpiNames.clone();
--- a/jdk/src/share/classes/javax/imageio/stream/FileCacheImageInputStream.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/javax/imageio/stream/FileCacheImageInputStream.java Fri Jun 12 10:54:48 2009 -0700
@@ -62,6 +62,10 @@
/** The DisposerRecord that closes the underlying cache. */
private final DisposerRecord disposerRecord;
+ /** The CloseAction that closes the stream in
+ * the StreamCloser's shutdown hook */
+ private final StreamCloser.CloseAction closeAction;
+
/**
* Constructs a <code>FileCacheImageInputStream</code> that will read
* from a given <code>InputStream</code>.
@@ -96,7 +100,9 @@
this.cacheFile =
File.createTempFile("imageio", ".tmp", cacheDir);
this.cache = new RandomAccessFile(cacheFile, "rw");
- StreamCloser.addToQueue(this);
+
+ this.closeAction = StreamCloser.createCloseAction(this);
+ StreamCloser.addToQueue(closeAction);
disposerRecord = new StreamDisposerRecord(cacheFile, cache);
if (getClass() == FileCacheImageInputStream.class) {
@@ -242,7 +248,7 @@
stream = null;
cache = null;
cacheFile = null;
- StreamCloser.removeFromQueue(this);
+ StreamCloser.removeFromQueue(closeAction);
}
/**
--- a/jdk/src/share/classes/javax/imageio/stream/FileCacheImageOutputStream.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/javax/imageio/stream/FileCacheImageOutputStream.java Fri Jun 12 10:54:48 2009 -0700
@@ -48,6 +48,10 @@
// Pos after last (rightmost) byte written
private long maxStreamPos = 0L;
+ /** The CloseAction that closes the stream in
+ * the StreamCloser's shutdown hook */
+ private final StreamCloser.CloseAction closeAction;
+
/**
* Constructs a <code>FileCacheImageOutputStream</code> that will write
* to a given <code>outputStream</code>.
@@ -82,7 +86,9 @@
this.cacheFile =
File.createTempFile("imageio", ".tmp", cacheDir);
this.cache = new RandomAccessFile(cacheFile, "rw");
- StreamCloser.addToQueue(this);
+
+ this.closeAction = StreamCloser.createCloseAction(this);
+ StreamCloser.addToQueue(closeAction);
}
public int read() throws IOException {
@@ -227,7 +233,7 @@
cacheFile = null;
stream.flush();
stream = null;
- StreamCloser.removeFromQueue(this);
+ StreamCloser.removeFromQueue(closeAction);
}
public void flushBefore(long pos) throws IOException {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/sun/net/ApplicationProxy.java Fri Jun 12 10:54:48 2009 -0700
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package sun.net;
+
+import java.net.Proxy;
+import java.net.SocketAddress;
+
+/**
+ * Proxy wrapper class so that we can determine application set
+ * proxies by type.
+ */
+public final class ApplicationProxy extends Proxy {
+ private ApplicationProxy(Proxy proxy) {
+ super(proxy.type(), proxy.address());
+ }
+
+ public static ApplicationProxy create(Proxy proxy) {
+ return new ApplicationProxy(proxy);
+ }
+}
--- a/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Fri Jun 12 10:54:48 2009 -0700
@@ -575,12 +575,20 @@
responses = new MessageHeader();
this.handler = handler;
instProxy = p;
- cookieHandler = java.security.AccessController.doPrivileged(
- new java.security.PrivilegedAction<CookieHandler>() {
+ if (instProxy instanceof sun.net.ApplicationProxy) {
+ /* Application set Proxies should not have access to cookies
+ * in a secure environment unless explicitly allowed. */
+ try {
+ cookieHandler = CookieHandler.getDefault();
+ } catch (SecurityException se) { /* swallow exception */ }
+ } else {
+ cookieHandler = java.security.AccessController.doPrivileged(
+ new java.security.PrivilegedAction<CookieHandler>() {
public CookieHandler run() {
- return CookieHandler.getDefault();
- }
- });
+ return CookieHandler.getDefault();
+ }
+ });
+ }
cacheHandler = java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<ResponseCache>() {
public ResponseCache run() {
--- a/jdk/src/share/lib/security/java.security Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/lib/security/java.security Fri Jun 12 10:54:48 2009 -0700
@@ -127,7 +127,7 @@
# passed to checkPackageAccess unless the
# corresponding RuntimePermission ("accessClassInPackage."+package) has
# been granted.
-package.access=sun.
+package.access=sun.,com.sun.imageio.
#
# List of comma-separated packages that start with or equal this string
--- a/jdk/src/share/lib/security/java.security-solaris Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/lib/security/java.security-solaris Fri Jun 12 10:54:48 2009 -0700
@@ -128,7 +128,7 @@
# passed to checkPackageAccess unless the
# corresponding RuntimePermission ("accessClassInPackage."+package) has
# been granted.
-package.access=sun.
+package.access=sun.,com.sun.imageio.
#
# List of comma-separated packages that start with or equal this string
--- a/jdk/src/share/lib/security/java.security-windows Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/lib/security/java.security-windows Fri Jun 12 10:54:48 2009 -0700
@@ -128,7 +128,7 @@
# passed to checkPackageAccess unless the
# corresponding RuntimePermission ("accessClassInPackage."+package) has
# been granted.
-package.access=sun.
+package.access=sun.,com.sun.imageio.
#
# List of comma-separated packages that start with or equal this string
--- a/jdk/src/share/native/sun/awt/splashscreen/splashscreen_jpeg.c Thu May 07 13:18:12 2009 -0700
+++ b/jdk/src/share/native/sun/awt/splashscreen/splashscreen_jpeg.c Fri Jun 12 10:54:48 2009 -0700
@@ -139,21 +139,45 @@
splash->width = cinfo->output_width;
splash->height = cinfo->output_height;
+
+ if (!SAFE_TO_ALLOC(splash->imageFormat.depthBytes, splash->width)) {
+ return 0;
+ }
stride = splash->width * splash->imageFormat.depthBytes;
+ if (!SAFE_TO_ALLOC(stride, splash->height)) {
+ return 0;
+ }
+ if (!SAFE_TO_ALLOC(cinfo->output_width, cinfo->output_components)) {
+ return 0;
+ }
+
splash->frameCount = 1;
splash->frames = (SplashImage *) malloc(sizeof(SplashImage) *
splash->frameCount);
+ if (splash->frames == NULL) {
+ return 0;
+ }
memset(splash->frames, 0, sizeof(SplashImage) *
splash->frameCount);
+
splash->loopCount = 1;
+ splash->frames[0].delay = 0;
splash->frames[0].bitmapBits = malloc(stride * splash->height);
- splash->frames[0].delay = 0;
+ if (splash->frames[0].bitmapBits == NULL) {
+ free(splash->frames);
+ return 0;
+ }
rowStride = cinfo->output_width * cinfo->output_components;
buffer = (*cinfo->mem->alloc_sarray)
((j_common_ptr) cinfo, JPOOL_IMAGE, rowStride, 1);
+ if (buffer == NULL) {
+ free(splash->frames[0].bitmapBits);
+ free(splash->frames);
+ return 0;
+ }
initFormat(&srcFormat, 0x00FF0000, 0x0000FF00, 0x000000FF, 0x00000000);
srcFormat.byteOrder = BYTE_ORDER_LSBFIRST;