6725399: (ch) Channels.newInputStream should check for null
Update to check null arg for all Channels methods Reviewed-by: alanb
This commit is contained in:
parent
70624128b4
commit
b596dd66fa
@ -65,6 +65,10 @@ public final class Channels {
|
|||||||
|
|
||||||
private Channels() { } // No instantiation
|
private Channels() { } // No instantiation
|
||||||
|
|
||||||
|
private static void checkNotNull(Object o, String name) {
|
||||||
|
if (o == null)
|
||||||
|
throw new NullPointerException("\"" + name + "\" is null!");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write all remaining bytes in buffer to the given channel.
|
* Write all remaining bytes in buffer to the given channel.
|
||||||
@ -120,6 +124,7 @@ public final class Channels {
|
|||||||
* @return A new input stream
|
* @return A new input stream
|
||||||
*/
|
*/
|
||||||
public static InputStream newInputStream(ReadableByteChannel ch) {
|
public static InputStream newInputStream(ReadableByteChannel ch) {
|
||||||
|
checkNotNull(ch, "ch");
|
||||||
return new sun.nio.ch.ChannelInputStream(ch);
|
return new sun.nio.ch.ChannelInputStream(ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,6 +143,8 @@ public final class Channels {
|
|||||||
* @return A new output stream
|
* @return A new output stream
|
||||||
*/
|
*/
|
||||||
public static OutputStream newOutputStream(final WritableByteChannel ch) {
|
public static OutputStream newOutputStream(final WritableByteChannel ch) {
|
||||||
|
checkNotNull(ch, "ch");
|
||||||
|
|
||||||
return new OutputStream() {
|
return new OutputStream() {
|
||||||
|
|
||||||
private ByteBuffer bb = null;
|
private ByteBuffer bb = null;
|
||||||
@ -193,9 +200,7 @@ public final class Channels {
|
|||||||
* @return A new readable byte channel
|
* @return A new readable byte channel
|
||||||
*/
|
*/
|
||||||
public static ReadableByteChannel newChannel(final InputStream in) {
|
public static ReadableByteChannel newChannel(final InputStream in) {
|
||||||
if (in == null) {
|
checkNotNull(in, "in");
|
||||||
throw new NullPointerException();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (in instanceof FileInputStream &&
|
if (in instanceof FileInputStream &&
|
||||||
FileInputStream.class.equals(in.getClass())) {
|
FileInputStream.class.equals(in.getClass())) {
|
||||||
@ -270,9 +275,7 @@ public final class Channels {
|
|||||||
* @return A new writable byte channel
|
* @return A new writable byte channel
|
||||||
*/
|
*/
|
||||||
public static WritableByteChannel newChannel(final OutputStream out) {
|
public static WritableByteChannel newChannel(final OutputStream out) {
|
||||||
if (out == null) {
|
checkNotNull(out, "out");
|
||||||
throw new NullPointerException();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (out instanceof FileOutputStream &&
|
if (out instanceof FileOutputStream &&
|
||||||
FileOutputStream.class.equals(out.getClass())) {
|
FileOutputStream.class.equals(out.getClass())) {
|
||||||
@ -357,8 +360,8 @@ public final class Channels {
|
|||||||
CharsetDecoder dec,
|
CharsetDecoder dec,
|
||||||
int minBufferCap)
|
int minBufferCap)
|
||||||
{
|
{
|
||||||
dec.reset();
|
checkNotNull(ch, "ch");
|
||||||
return StreamDecoder.forDecoder(ch, dec, minBufferCap);
|
return StreamDecoder.forDecoder(ch, dec.reset(), minBufferCap);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -393,6 +396,7 @@ public final class Channels {
|
|||||||
public static Reader newReader(ReadableByteChannel ch,
|
public static Reader newReader(ReadableByteChannel ch,
|
||||||
String csName)
|
String csName)
|
||||||
{
|
{
|
||||||
|
checkNotNull(csName, "csName");
|
||||||
return newReader(ch, Charset.forName(csName).newDecoder(), -1);
|
return newReader(ch, Charset.forName(csName).newDecoder(), -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -425,8 +429,8 @@ public final class Channels {
|
|||||||
final CharsetEncoder enc,
|
final CharsetEncoder enc,
|
||||||
final int minBufferCap)
|
final int minBufferCap)
|
||||||
{
|
{
|
||||||
enc.reset();
|
checkNotNull(ch, "ch");
|
||||||
return StreamEncoder.forEncoder(ch, enc, minBufferCap);
|
return StreamEncoder.forEncoder(ch, enc.reset(), minBufferCap);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -461,6 +465,7 @@ public final class Channels {
|
|||||||
public static Writer newWriter(WritableByteChannel ch,
|
public static Writer newWriter(WritableByteChannel ch,
|
||||||
String csName)
|
String csName)
|
||||||
{
|
{
|
||||||
|
checkNotNull(csName, "csName");
|
||||||
return newWriter(ch, Charset.forName(csName).newEncoder(), -1);
|
return newWriter(ch, Charset.forName(csName).newEncoder(), -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,12 +22,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* @test
|
/* @test
|
||||||
* @bug 4417152 4481572 6248930
|
* @bug 4417152 4481572 6248930 6725399
|
||||||
* @summary Test Channels basic functionality
|
* @summary Test Channels basic functionality
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.*;
|
import java.nio.*;
|
||||||
|
import java.nio.charset.*;
|
||||||
import java.nio.channels.*;
|
import java.nio.channels.*;
|
||||||
|
|
||||||
|
|
||||||
@ -50,22 +51,106 @@ public class Basic {
|
|||||||
test();
|
test();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void failNpeExpected() {
|
||||||
|
throw new RuntimeException("Did not get the expected NullPointerException.");
|
||||||
|
}
|
||||||
|
|
||||||
private static void test() throws Exception {
|
private static void test() throws Exception {
|
||||||
|
//Test if methods of Channels throw NPE with null argument(s)
|
||||||
|
try {
|
||||||
|
Channels.newInputStream((ReadableByteChannel)null);
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException npe) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Channels.newOutputStream((WritableByteChannel)null);
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException npe) {}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ReadableByteChannel channel = Channels.newChannel((InputStream)null);
|
ReadableByteChannel channel = Channels.newChannel((InputStream)null);
|
||||||
|
failNpeExpected();
|
||||||
throw new RuntimeException("Did not get the expected NullPointerException.");
|
} catch (NullPointerException ne) {} // OK. As expected.
|
||||||
} catch (NullPointerException ne) {
|
|
||||||
// OK. As expected.
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
WritableByteChannel channel = Channels.newChannel((OutputStream)null);
|
WritableByteChannel channel = Channels.newChannel((OutputStream)null);
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException ne) {} // OK. As expected.
|
||||||
|
|
||||||
|
WritableByteChannel wbc = new WritableByteChannel() {
|
||||||
|
public int write(ByteBuffer src) { return 0; }
|
||||||
|
public void close() throws IOException { }
|
||||||
|
public boolean isOpen() { return true; }
|
||||||
|
};
|
||||||
|
|
||||||
|
ReadableByteChannel rbc = new ReadableByteChannel() {
|
||||||
|
public int read(ByteBuffer dst) { return 0; }
|
||||||
|
public void close() {}
|
||||||
|
public boolean isOpen() { return true; }
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
Channels.newReader((ReadableByteChannel)null,
|
||||||
|
Charset.defaultCharset().newDecoder(),
|
||||||
|
-1);
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException npe) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Channels.newReader(rbc, (CharsetDecoder)null, -1);
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException npe) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Channels.newReader((ReadableByteChannel)null,
|
||||||
|
Charset.defaultCharset().name());
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException npe) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Channels.newReader(rbc, null);
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException npe) {}
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
Channels.newReader(null, null);
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException npe) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Channels.newWriter((WritableByteChannel)null,
|
||||||
|
Charset.defaultCharset().newEncoder(),
|
||||||
|
-1);
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException npe) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Channels.newWriter(null, null, -1);
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException npe) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Channels.newWriter(wbc, null, -1);
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException npe) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Channels.newWriter((WritableByteChannel)null,
|
||||||
|
Charset.defaultCharset().name());
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException npe) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Channels.newWriter(wbc, null);
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException npe) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Channels.newWriter(null, null);
|
||||||
|
failNpeExpected();
|
||||||
|
} catch (NullPointerException npe) {}
|
||||||
|
|
||||||
throw new RuntimeException("Did not get the expected NullPointerException.");
|
|
||||||
} catch (NullPointerException ne) {
|
|
||||||
// OK. As expected.
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
blah = File.createTempFile("blah", null);
|
blah = File.createTempFile("blah", null);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user