提交 73e6821d 编写于 作者: A asaha

Merge

...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
# #
FILES_java = \ FILES_java = \
sun/net/ApplicationProxy.java \
sun/net/InetAddressCachePolicy.java \ sun/net/InetAddressCachePolicy.java \
sun/net/URLCanonicalizer.java \ sun/net/URLCanonicalizer.java \
sun/net/NetworkClient.java \ sun/net/NetworkClient.java \
......
...@@ -51,7 +51,7 @@ public class BMPImageReaderSpi extends ImageReaderSpi { ...@@ -51,7 +51,7 @@ public class BMPImageReaderSpi extends ImageReaderSpi {
entensions, entensions,
mimeType, mimeType,
"com.sun.imageio.plugins.bmp.BMPImageReader", "com.sun.imageio.plugins.bmp.BMPImageReader",
STANDARD_INPUT_TYPE, new Class[] { ImageInputStream.class },
writerSpiNames, writerSpiNames,
false, false,
null, null, null, null, null, null, null, null,
......
...@@ -32,6 +32,7 @@ import java.awt.image.SinglePixelPackedSampleModel; ...@@ -32,6 +32,7 @@ import java.awt.image.SinglePixelPackedSampleModel;
import javax.imageio.spi.ImageWriterSpi; import javax.imageio.spi.ImageWriterSpi;
import javax.imageio.spi.ServiceRegistry; import javax.imageio.spi.ServiceRegistry;
import javax.imageio.spi.IIORegistry; import javax.imageio.spi.IIORegistry;
import javax.imageio.stream.ImageOutputStream;
import javax.imageio.ImageWriter; import javax.imageio.ImageWriter;
import javax.imageio.ImageTypeSpecifier; import javax.imageio.ImageTypeSpecifier;
import javax.imageio.IIOException; import javax.imageio.IIOException;
...@@ -55,7 +56,7 @@ public class BMPImageWriterSpi extends ImageWriterSpi { ...@@ -55,7 +56,7 @@ public class BMPImageWriterSpi extends ImageWriterSpi {
entensions, entensions,
mimeType, mimeType,
"com.sun.imageio.plugins.bmp.BMPImageWriter", "com.sun.imageio.plugins.bmp.BMPImageWriter",
STANDARD_OUTPUT_TYPE, new Class[] { ImageOutputStream.class },
readerSpiNames, readerSpiNames,
false, false,
null, null, null, null, null, null, null, null,
......
...@@ -60,7 +60,7 @@ public class GIFImageReaderSpi extends ImageReaderSpi { ...@@ -60,7 +60,7 @@ public class GIFImageReaderSpi extends ImageReaderSpi {
suffixes, suffixes,
MIMETypes, MIMETypes,
readerClassName, readerClassName,
STANDARD_INPUT_TYPE, new Class[] { ImageInputStream.class },
writerSpiNames, writerSpiNames,
true, true,
GIFStreamMetadata.nativeMetadataFormatName, GIFStreamMetadata.nativeMetadataFormatName,
......
...@@ -31,6 +31,7 @@ import java.util.Locale; ...@@ -31,6 +31,7 @@ import java.util.Locale;
import javax.imageio.ImageTypeSpecifier; import javax.imageio.ImageTypeSpecifier;
import javax.imageio.ImageWriter; import javax.imageio.ImageWriter;
import javax.imageio.spi.ImageWriterSpi; import javax.imageio.spi.ImageWriterSpi;
import javax.imageio.stream.ImageOutputStream;
import com.sun.imageio.plugins.common.PaletteBuilder; import com.sun.imageio.plugins.common.PaletteBuilder;
public class GIFImageWriterSpi extends ImageWriterSpi { public class GIFImageWriterSpi extends ImageWriterSpi {
...@@ -59,7 +60,7 @@ public class GIFImageWriterSpi extends ImageWriterSpi { ...@@ -59,7 +60,7 @@ public class GIFImageWriterSpi extends ImageWriterSpi {
suffixes, suffixes,
MIMETypes, MIMETypes,
writerClassName, writerClassName,
STANDARD_OUTPUT_TYPE, new Class[] { ImageOutputStream.class },
readerSpiNames, readerSpiNames,
true, true,
GIFWritableStreamMetadata.NATIVE_FORMAT_NAME, GIFWritableStreamMetadata.NATIVE_FORMAT_NAME,
......
...@@ -46,7 +46,7 @@ public class JPEGImageReaderSpi extends ImageReaderSpi { ...@@ -46,7 +46,7 @@ public class JPEGImageReaderSpi extends ImageReaderSpi {
JPEG.suffixes, JPEG.suffixes,
JPEG.MIMETypes, JPEG.MIMETypes,
"com.sun.imageio.plugins.jpeg.JPEGImageReader", "com.sun.imageio.plugins.jpeg.JPEGImageReader",
STANDARD_INPUT_TYPE, new Class[] { ImageInputStream.class },
writerSpiNames, writerSpiNames,
true, true,
JPEG.nativeStreamMetadataFormatName, JPEG.nativeStreamMetadataFormatName,
......
...@@ -28,6 +28,7 @@ package com.sun.imageio.plugins.jpeg; ...@@ -28,6 +28,7 @@ package com.sun.imageio.plugins.jpeg;
import javax.imageio.spi.ImageWriterSpi; import javax.imageio.spi.ImageWriterSpi;
import javax.imageio.spi.ServiceRegistry; import javax.imageio.spi.ServiceRegistry;
import javax.imageio.spi.IIORegistry; import javax.imageio.spi.IIORegistry;
import javax.imageio.stream.ImageOutputStream;
import javax.imageio.ImageWriter; import javax.imageio.ImageWriter;
import javax.imageio.ImageTypeSpecifier; import javax.imageio.ImageTypeSpecifier;
import javax.imageio.IIOException; import javax.imageio.IIOException;
...@@ -49,7 +50,7 @@ public class JPEGImageWriterSpi extends ImageWriterSpi { ...@@ -49,7 +50,7 @@ public class JPEGImageWriterSpi extends ImageWriterSpi {
JPEG.suffixes, JPEG.suffixes,
JPEG.MIMETypes, JPEG.MIMETypes,
"com.sun.imageio.plugins.jpeg.JPEGImageWriter", "com.sun.imageio.plugins.jpeg.JPEGImageWriter",
STANDARD_OUTPUT_TYPE, new Class[] { ImageOutputStream.class },
readerSpiNames, readerSpiNames,
true, true,
JPEG.nativeStreamMetadataFormatName, JPEG.nativeStreamMetadataFormatName,
......
...@@ -60,7 +60,7 @@ public class PNGImageReaderSpi extends ImageReaderSpi { ...@@ -60,7 +60,7 @@ public class PNGImageReaderSpi extends ImageReaderSpi {
suffixes, suffixes,
MIMETypes, MIMETypes,
readerClassName, readerClassName,
STANDARD_INPUT_TYPE, new Class[] { ImageInputStream.class },
writerSpiNames, writerSpiNames,
false, false,
null, null, null, null,
......
...@@ -34,6 +34,7 @@ import javax.imageio.ImageTypeSpecifier; ...@@ -34,6 +34,7 @@ import javax.imageio.ImageTypeSpecifier;
import javax.imageio.metadata.IIOMetadataFormat; import javax.imageio.metadata.IIOMetadataFormat;
import javax.imageio.metadata.IIOMetadataFormatImpl; import javax.imageio.metadata.IIOMetadataFormatImpl;
import javax.imageio.spi.ImageWriterSpi; import javax.imageio.spi.ImageWriterSpi;
import javax.imageio.stream.ImageOutputStream;
public class PNGImageWriterSpi extends ImageWriterSpi { public class PNGImageWriterSpi extends ImageWriterSpi {
...@@ -61,7 +62,7 @@ public class PNGImageWriterSpi extends ImageWriterSpi { ...@@ -61,7 +62,7 @@ public class PNGImageWriterSpi extends ImageWriterSpi {
suffixes, suffixes,
MIMETypes, MIMETypes,
writerClassName, writerClassName,
STANDARD_OUTPUT_TYPE, new Class[] { ImageOutputStream.class },
readerSpiNames, readerSpiNames,
false, false,
null, null, null, null,
......
...@@ -51,7 +51,7 @@ public class WBMPImageReaderSpi extends ImageReaderSpi { ...@@ -51,7 +51,7 @@ public class WBMPImageReaderSpi extends ImageReaderSpi {
entensions, entensions,
mimeType, mimeType,
"com.sun.imageio.plugins.wbmp.WBMPImageReader", "com.sun.imageio.plugins.wbmp.WBMPImageReader",
STANDARD_INPUT_TYPE, new Class[] { ImageInputStream.class },
writerSpiNames, writerSpiNames,
true, true,
null, null, null, null, null, null, null, null,
......
...@@ -28,6 +28,7 @@ package com.sun.imageio.plugins.wbmp; ...@@ -28,6 +28,7 @@ package com.sun.imageio.plugins.wbmp;
import javax.imageio.spi.ImageWriterSpi; import javax.imageio.spi.ImageWriterSpi;
import javax.imageio.spi.ServiceRegistry; import javax.imageio.spi.ServiceRegistry;
import javax.imageio.spi.IIORegistry; import javax.imageio.spi.IIORegistry;
import javax.imageio.stream.ImageOutputStream;
import javax.imageio.ImageWriter; import javax.imageio.ImageWriter;
import javax.imageio.ImageTypeSpecifier; import javax.imageio.ImageTypeSpecifier;
import javax.imageio.IIOException; import javax.imageio.IIOException;
...@@ -54,7 +55,7 @@ public class WBMPImageWriterSpi extends ImageWriterSpi { ...@@ -54,7 +55,7 @@ public class WBMPImageWriterSpi extends ImageWriterSpi {
entensions, entensions,
mimeType, mimeType,
"com.sun.imageio.plugins.wbmp.WBMPImageWriter", "com.sun.imageio.plugins.wbmp.WBMPImageWriter",
STANDARD_OUTPUT_TYPE, new Class[] { ImageOutputStream.class },
readerSpiNames, readerSpiNames,
true, true,
null, null, null, null, null, null, null, null,
......
...@@ -43,35 +43,35 @@ import javax.imageio.stream.ImageInputStream; ...@@ -43,35 +43,35 @@ import javax.imageio.stream.ImageInputStream;
*/ */
public class StreamCloser { public class StreamCloser {
private static WeakHashMap<ImageInputStream, Object> toCloseQueue; private static WeakHashMap<CloseAction, Object> toCloseQueue;
private static Thread streamCloser; private static Thread streamCloser;
public static void addToQueue(ImageInputStream iis) { public static void addToQueue(CloseAction ca) {
synchronized (StreamCloser.class) { synchronized (StreamCloser.class) {
if (toCloseQueue == null) { if (toCloseQueue == null) {
toCloseQueue = toCloseQueue =
new WeakHashMap<ImageInputStream, Object>(); new WeakHashMap<CloseAction, Object>();
} }
toCloseQueue.put(iis, null); toCloseQueue.put(ca, null);
if (streamCloser == null) { if (streamCloser == null) {
final Runnable streamCloserRunnable = new Runnable() { final Runnable streamCloserRunnable = new Runnable() {
public void run() { public void run() {
if (toCloseQueue != null) { if (toCloseQueue != null) {
synchronized (StreamCloser.class) { synchronized (StreamCloser.class) {
Set<ImageInputStream> set = Set<CloseAction> set =
toCloseQueue.keySet(); toCloseQueue.keySet();
// Make a copy of the set in order to avoid // Make a copy of the set in order to avoid
// concurrent modification (the is.close() // concurrent modification (the is.close()
// will in turn call removeFromQueue()) // will in turn call removeFromQueue())
ImageInputStream[] streams = CloseAction[] actions =
new ImageInputStream[set.size()]; new CloseAction[set.size()];
streams = set.toArray(streams); actions = set.toArray(actions);
for (ImageInputStream is : streams) { for (CloseAction ca : actions) {
if (is != null) { if (ca != null) {
try { try {
is.close(); ca.performAction();
} catch (IOException e) { } catch (IOException e) {
} }
} }
...@@ -106,10 +106,28 @@ public class StreamCloser { ...@@ -106,10 +106,28 @@ public class StreamCloser {
} }
} }
public static void removeFromQueue(ImageInputStream iis) { public static void removeFromQueue(CloseAction ca) {
synchronized (StreamCloser.class) { synchronized (StreamCloser.class) {
if (toCloseQueue != null) { 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();
} }
} }
} }
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -41,6 +41,15 @@ import javax.sound.midi.spi.MidiFileWriter; ...@@ -41,6 +41,15 @@ import javax.sound.midi.spi.MidiFileWriter;
import javax.sound.midi.spi.SoundbankReader; import javax.sound.midi.spi.SoundbankReader;
import javax.sound.midi.spi.MidiDeviceProvider; 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 * JDK13Services uses the Service class in JDK 1.3
...@@ -186,6 +195,16 @@ public class JDK13Services { ...@@ -186,6 +195,16 @@ public class JDK13Services {
If the property is not set, null is returned. If the property is not set, null is returned.
*/ */
private static synchronized String getDefaultProvider(Class typeClass) { 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 value;
String propertyName = typeClass.getName(); String propertyName = typeClass.getName();
value = JSSecurityManager.getProperty(propertyName); value = JSSecurityManager.getProperty(propertyName);
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -283,28 +283,37 @@ class JSSecurityManager { ...@@ -283,28 +283,37 @@ class JSSecurityManager {
static List getProviders(final Class providerClass) { static List getProviders(final Class providerClass) {
PrivilegedAction action = new PrivilegedAction() { List p = new ArrayList();
public Object run() { // Service.providers(Class) just creates "lazy" iterator instance,
List p = new ArrayList(); // so it doesn't require do be called from privileged section
Iterator ps = Service.providers(providerClass); final Iterator ps = Service.providers(providerClass);
while (ps.hasNext()) {
try { // the iterator's hasNext() method looks through classpath for
Object provider = ps.next(); // the provider class names, so it requires read permissions
if (providerClass.isInstance(provider)) { PrivilegedAction<Boolean> hasNextAction = new PrivilegedAction<Boolean>() {
// $$mp 2003-08-22 public Boolean run() {
// Always adding at the beginning reverses the return ps.hasNext();
// order of the providers. So we no longer have }
// to do this in AudioSystem and MidiSystem. };
p.add(0, provider);
} while (AccessController.doPrivileged(hasNextAction)) {
} catch (Throwable t) { try {
//$$fb 2002-11-07: do not fail on SPI not found // the iterator's next() method creates instances of the
if (Printer.err) t.printStackTrace(); // providers and it should be called in the current security
} } // context
return p; 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) {
List providers = (List) AccessController.doPrivileged(action); //$$fb 2002-11-07: do not fail on SPI not found
return providers; if (Printer.err) t.printStackTrace();
}
}
return p;
} }
} }
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -82,7 +82,7 @@ public class StandardMidiFileWriter extends MidiFileWriter { ...@@ -82,7 +82,7 @@ public class StandardMidiFileWriter extends MidiFileWriter {
/** /**
* MIDI parser types * MIDI parser types
*/ */
public static final int types[] = { private static final int types[] = {
MIDI_TYPE_0, MIDI_TYPE_0,
MIDI_TYPE_1 MIDI_TYPE_1
}; };
......
...@@ -118,7 +118,7 @@ class Socket implements java.io.Closeable { ...@@ -118,7 +118,7 @@ class Socket implements java.io.Closeable {
if (proxy == null) { if (proxy == null) {
throw new IllegalArgumentException("Invalid Proxy"); 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) { if (p.type() == Proxy.Type.SOCKS) {
SecurityManager security = System.getSecurityManager(); SecurityManager security = System.getSecurityManager();
InetSocketAddress epoint = (InetSocketAddress) p.address(); InetSocketAddress epoint = (InetSocketAddress) p.address();
......
...@@ -47,6 +47,9 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts { ...@@ -47,6 +47,9 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
private Socket cmdsock = null; private Socket cmdsock = null;
private InputStream cmdIn = null; private InputStream cmdIn = null;
private OutputStream cmdOut = null; private OutputStream cmdOut = null;
/* true if the Proxy has been set programatically */
private boolean applicationSetProxy; /* false */
SocksSocketImpl() { SocksSocketImpl() {
// Nothing needed // Nothing needed
...@@ -64,6 +67,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts { ...@@ -64,6 +67,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
// Use getHostString() to avoid reverse lookups // Use getHostString() to avoid reverse lookups
server = ad.getHostString(); server = ad.getHostString();
port = ad.getPort(); port = ad.getPort();
applicationSetProxy = true;
} }
} }
...@@ -165,8 +169,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts { ...@@ -165,8 +169,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
throw (IOException) pae.getException(); throw (IOException) pae.getException();
} }
} else { } else {
userName = java.security.AccessController.doPrivileged( userName = getUserName();
new sun.security.action.GetPropertyAction("user.name"));
} }
} }
if (userName == null) if (userName == null)
...@@ -267,8 +270,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts { ...@@ -267,8 +270,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
out.write((endpoint.getPort() >> 8) & 0xff); out.write((endpoint.getPort() >> 8) & 0xff);
out.write((endpoint.getPort() >> 0) & 0xff); out.write((endpoint.getPort() >> 0) & 0xff);
out.write(endpoint.getAddress().getAddress()); out.write(endpoint.getAddress().getAddress());
String userName = java.security.AccessController.doPrivileged( String userName = getUserName();
new sun.security.action.GetPropertyAction("user.name"));
try { try {
out.write(userName.getBytes("ISO-8859-1")); out.write(userName.getBytes("ISO-8859-1"));
} catch (java.io.UnsupportedEncodingException uee) { } catch (java.io.UnsupportedEncodingException uee) {
...@@ -588,8 +590,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts { ...@@ -588,8 +590,7 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
out.write((super.getLocalPort() >> 8) & 0xff); out.write((super.getLocalPort() >> 8) & 0xff);
out.write((super.getLocalPort() >> 0) & 0xff); out.write((super.getLocalPort() >> 0) & 0xff);
out.write(addr1); out.write(addr1);
String userName = java.security.AccessController.doPrivileged( String userName = getUserName();
new sun.security.action.GetPropertyAction("user.name"));
try { try {
out.write(userName.getBytes("ISO-8859-1")); out.write(userName.getBytes("ISO-8859-1"));
} catch (java.io.UnsupportedEncodingException uee) { } catch (java.io.UnsupportedEncodingException uee) {
...@@ -1052,4 +1053,16 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts { ...@@ -1052,4 +1053,16 @@ class SocksSocketImpl extends PlainSocketImpl implements SocksConsts {
super.close(); 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;
}
} }
...@@ -1005,7 +1005,7 @@ public final class URL implements java.io.Serializable { ...@@ -1005,7 +1005,7 @@ public final class URL implements java.io.Serializable {
} }
// Create a copy of Proxy as a security measure // 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(); SecurityManager sm = System.getSecurityManager();
if (p.type() != Proxy.Type.DIRECT && sm != null) { if (p.type() != Proxy.Type.DIRECT && sm != null) {
InetSocketAddress epoint = (InetSocketAddress) p.address(); InetSocketAddress epoint = (InetSocketAddress) p.address();
......
...@@ -78,7 +78,7 @@ public class BMPImageWriteParam extends ImageWriteParam { ...@@ -78,7 +78,7 @@ public class BMPImageWriteParam extends ImageWriteParam {
super(locale); super(locale);
// Set compression types ("BI_RGB" denotes uncompressed). // Set compression types ("BI_RGB" denotes uncompressed).
compressionTypes = BMPConstants.compressionTypeNames; compressionTypes = BMPConstants.compressionTypeNames.clone();
// Set compression flag. // Set compression flag.
canWriteCompressed = true; canWriteCompressed = true;
......
...@@ -77,7 +77,10 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi { ...@@ -77,7 +77,10 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi {
* A single-element array, initially containing * A single-element array, initially containing
* <code>ImageInputStream.class</code>, to be returned from * <code>ImageInputStream.class</code>, to be returned from
* <code>getInputTypes</code>. * <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 = public static final Class[] STANDARD_INPUT_TYPE =
{ ImageInputStream.class }; { ImageInputStream.class };
...@@ -227,7 +230,11 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi { ...@@ -227,7 +230,11 @@ public abstract class ImageReaderSpi extends ImageReaderWriterSpi {
throw new IllegalArgumentException throw new IllegalArgumentException
("inputTypes.length == 0!"); ("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 length == 0, leave it null
if (writerSpiNames != null && writerSpiNames.length > 0) { if (writerSpiNames != null && writerSpiNames.length > 0) {
this.writerSpiNames = (String[])writerSpiNames.clone(); this.writerSpiNames = (String[])writerSpiNames.clone();
......
...@@ -77,9 +77,12 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { ...@@ -77,9 +77,12 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi {
/** /**
* A single-element array, initially containing * A single-element array, initially containing
* <code>ImageInputStream.class</code>, to be returned from * <code>ImageOutputStream.class</code>, to be returned from
* <code>getInputTypes</code>. * <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 = public static final Class[] STANDARD_OUTPUT_TYPE =
{ ImageOutputStream.class }; { ImageOutputStream.class };
...@@ -228,7 +231,11 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { ...@@ -228,7 +231,11 @@ public abstract class ImageWriterSpi extends ImageReaderWriterSpi {
throw new IllegalArgumentException throw new IllegalArgumentException
("outputTypes.length == 0!"); ("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 length == 0, leave it null
if (readerSpiNames != null && readerSpiNames.length > 0) { if (readerSpiNames != null && readerSpiNames.length > 0) {
this.readerSpiNames = (String[])readerSpiNames.clone(); this.readerSpiNames = (String[])readerSpiNames.clone();
......
...@@ -62,6 +62,10 @@ public class FileCacheImageInputStream extends ImageInputStreamImpl { ...@@ -62,6 +62,10 @@ public class FileCacheImageInputStream extends ImageInputStreamImpl {
/** The DisposerRecord that closes the underlying cache. */ /** The DisposerRecord that closes the underlying cache. */
private final DisposerRecord disposerRecord; 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 * Constructs a <code>FileCacheImageInputStream</code> that will read
* from a given <code>InputStream</code>. * from a given <code>InputStream</code>.
...@@ -96,7 +100,9 @@ public class FileCacheImageInputStream extends ImageInputStreamImpl { ...@@ -96,7 +100,9 @@ public class FileCacheImageInputStream extends ImageInputStreamImpl {
this.cacheFile = this.cacheFile =
File.createTempFile("imageio", ".tmp", cacheDir); File.createTempFile("imageio", ".tmp", cacheDir);
this.cache = new RandomAccessFile(cacheFile, "rw"); this.cache = new RandomAccessFile(cacheFile, "rw");
StreamCloser.addToQueue(this);
this.closeAction = StreamCloser.createCloseAction(this);
StreamCloser.addToQueue(closeAction);
disposerRecord = new StreamDisposerRecord(cacheFile, cache); disposerRecord = new StreamDisposerRecord(cacheFile, cache);
if (getClass() == FileCacheImageInputStream.class) { if (getClass() == FileCacheImageInputStream.class) {
...@@ -242,7 +248,7 @@ public class FileCacheImageInputStream extends ImageInputStreamImpl { ...@@ -242,7 +248,7 @@ public class FileCacheImageInputStream extends ImageInputStreamImpl {
stream = null; stream = null;
cache = null; cache = null;
cacheFile = null; cacheFile = null;
StreamCloser.removeFromQueue(this); StreamCloser.removeFromQueue(closeAction);
} }
/** /**
......
...@@ -48,6 +48,10 @@ public class FileCacheImageOutputStream extends ImageOutputStreamImpl { ...@@ -48,6 +48,10 @@ public class FileCacheImageOutputStream extends ImageOutputStreamImpl {
// Pos after last (rightmost) byte written // Pos after last (rightmost) byte written
private long maxStreamPos = 0L; 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 * Constructs a <code>FileCacheImageOutputStream</code> that will write
* to a given <code>outputStream</code>. * to a given <code>outputStream</code>.
...@@ -82,7 +86,9 @@ public class FileCacheImageOutputStream extends ImageOutputStreamImpl { ...@@ -82,7 +86,9 @@ public class FileCacheImageOutputStream extends ImageOutputStreamImpl {
this.cacheFile = this.cacheFile =
File.createTempFile("imageio", ".tmp", cacheDir); File.createTempFile("imageio", ".tmp", cacheDir);
this.cache = new RandomAccessFile(cacheFile, "rw"); this.cache = new RandomAccessFile(cacheFile, "rw");
StreamCloser.addToQueue(this);
this.closeAction = StreamCloser.createCloseAction(this);
StreamCloser.addToQueue(closeAction);
} }
public int read() throws IOException { public int read() throws IOException {
...@@ -227,7 +233,7 @@ public class FileCacheImageOutputStream extends ImageOutputStreamImpl { ...@@ -227,7 +233,7 @@ public class FileCacheImageOutputStream extends ImageOutputStreamImpl {
cacheFile = null; cacheFile = null;
stream.flush(); stream.flush();
stream = null; stream = null;
StreamCloser.removeFromQueue(this); StreamCloser.removeFromQueue(closeAction);
} }
public void flushBefore(long pos) throws IOException { public void flushBefore(long pos) throws IOException {
......
/*
* 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);
}
}
...@@ -575,12 +575,20 @@ public class HttpURLConnection extends java.net.HttpURLConnection { ...@@ -575,12 +575,20 @@ public class HttpURLConnection extends java.net.HttpURLConnection {
responses = new MessageHeader(); responses = new MessageHeader();
this.handler = handler; this.handler = handler;
instProxy = p; instProxy = p;
cookieHandler = java.security.AccessController.doPrivileged( if (instProxy instanceof sun.net.ApplicationProxy) {
new java.security.PrivilegedAction<CookieHandler>() { /* 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() { public CookieHandler run() {
return CookieHandler.getDefault(); return CookieHandler.getDefault();
} }
}); });
}
cacheHandler = java.security.AccessController.doPrivileged( cacheHandler = java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<ResponseCache>() { new java.security.PrivilegedAction<ResponseCache>() {
public ResponseCache run() { public ResponseCache run() {
......
...@@ -127,7 +127,7 @@ system.scope=sun.security.provider.IdentityDatabase ...@@ -127,7 +127,7 @@ system.scope=sun.security.provider.IdentityDatabase
# passed to checkPackageAccess unless the # passed to checkPackageAccess unless the
# corresponding RuntimePermission ("accessClassInPackage."+package) has # corresponding RuntimePermission ("accessClassInPackage."+package) has
# been granted. # been granted.
package.access=sun. package.access=sun.,com.sun.imageio.
# #
# List of comma-separated packages that start with or equal this string # List of comma-separated packages that start with or equal this string
......
...@@ -128,7 +128,7 @@ system.scope=sun.security.provider.IdentityDatabase ...@@ -128,7 +128,7 @@ system.scope=sun.security.provider.IdentityDatabase
# passed to checkPackageAccess unless the # passed to checkPackageAccess unless the
# corresponding RuntimePermission ("accessClassInPackage."+package) has # corresponding RuntimePermission ("accessClassInPackage."+package) has
# been granted. # been granted.
package.access=sun. package.access=sun.,com.sun.imageio.
# #
# List of comma-separated packages that start with or equal this string # List of comma-separated packages that start with or equal this string
......
...@@ -128,7 +128,7 @@ system.scope=sun.security.provider.IdentityDatabase ...@@ -128,7 +128,7 @@ system.scope=sun.security.provider.IdentityDatabase
# passed to checkPackageAccess unless the # passed to checkPackageAccess unless the
# corresponding RuntimePermission ("accessClassInPackage."+package) has # corresponding RuntimePermission ("accessClassInPackage."+package) has
# been granted. # been granted.
package.access=sun. package.access=sun.,com.sun.imageio.
# #
# List of comma-separated packages that start with or equal this string # List of comma-separated packages that start with or equal this string
......
...@@ -139,21 +139,45 @@ SplashDecodeJpeg(Splash * splash, struct jpeg_decompress_struct *cinfo) ...@@ -139,21 +139,45 @@ SplashDecodeJpeg(Splash * splash, struct jpeg_decompress_struct *cinfo)
splash->width = cinfo->output_width; splash->width = cinfo->output_width;
splash->height = cinfo->output_height; splash->height = cinfo->output_height;
if (!SAFE_TO_ALLOC(splash->imageFormat.depthBytes, splash->width)) {
return 0;
}
stride = splash->width * splash->imageFormat.depthBytes; 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->frameCount = 1;
splash->frames = (SplashImage *) malloc(sizeof(SplashImage) * splash->frames = (SplashImage *) malloc(sizeof(SplashImage) *
splash->frameCount); splash->frameCount);
if (splash->frames == NULL) {
return 0;
}
memset(splash->frames, 0, sizeof(SplashImage) * memset(splash->frames, 0, sizeof(SplashImage) *
splash->frameCount); splash->frameCount);
splash->loopCount = 1; splash->loopCount = 1;
splash->frames[0].bitmapBits = malloc(stride * splash->height);
splash->frames[0].delay = 0; splash->frames[0].delay = 0;
splash->frames[0].bitmapBits = malloc(stride * splash->height);
if (splash->frames[0].bitmapBits == NULL) {
free(splash->frames);
return 0;
}
rowStride = cinfo->output_width * cinfo->output_components; rowStride = cinfo->output_width * cinfo->output_components;
buffer = (*cinfo->mem->alloc_sarray) buffer = (*cinfo->mem->alloc_sarray)
((j_common_ptr) cinfo, JPOOL_IMAGE, rowStride, 1); ((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); initFormat(&srcFormat, 0x00FF0000, 0x0000FF00, 0x000000FF, 0x00000000);
srcFormat.byteOrder = BYTE_ORDER_LSBFIRST; srcFormat.byteOrder = BYTE_ORDER_LSBFIRST;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册