提交 e96cf10d 编写于 作者: A alanb

7199551: (bf) CharBuffer.append(CharSequence) throws BufferOverflowException for read-only buffer

Reviewed-by: iris, dxu, chegar
上级 01b3765e
......@@ -741,6 +741,8 @@ public abstract class $Type$Buffer
public $Type$Buffer put($Type$Buffer src) {
if (src == this)
throw new IllegalArgumentException();
if (isReadOnly())
throw new ReadOnlyBufferException();
int n = src.remaining();
if (n > remaining())
throw new BufferOverflowException();
......@@ -888,6 +890,8 @@ public abstract class $Type$Buffer
*/
public $Type$Buffer put(String src, int start, int end) {
checkBounds(start, end - start, src.length());
if (isReadOnly())
throw new ReadOnlyBufferException();
if (end - start > remaining())
throw new BufferOverflowException();
for (int i = start; i < end; i++)
......
......@@ -335,7 +335,7 @@ public class Basic$Type$
fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
}
private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
boolean caught = false;
try {
thunk.run();
......@@ -350,7 +350,7 @@ public class Basic$Type$
fail(ex.getName() + " not thrown", b);
}
private static void tryCatch($type$ [] t, Class ex, Runnable thunk) {
private static void tryCatch($type$ [] t, Class<?> ex, Runnable thunk) {
tryCatch($Type$Buffer.wrap(t), ex, thunk);
}
......@@ -681,6 +681,14 @@ public class Basic$Type$
bulkPutBuffer(rb);
}});
// put($Type$Buffer) should not change source position
final $Type$Buffer src = $Type$Buffer.allocate(1);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.put(src);
}});
ck(src, src.position(), 0);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.compact();
......@@ -744,6 +752,22 @@ public class Basic$Type$
#end[byte]
#if[char]
// 7199551
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
String s = new String(new char[rb.remaining() + 1]);
rb.put(s);
}});
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
String s = new String(new char[rb.remaining() + 1]);
rb.append(s);
}});
#end[char]
if (rb.getClass().getName().startsWith("java.nio.Heap")) {
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
......
......@@ -25,7 +25,7 @@
* @summary Unit test for buffers
* @bug 4413135 4414911 4416536 4416562 4418782 4471053 4472779 4490253 4523725
* 4526177 4463011 4660660 4661219 4663521 4782970 4804304 4938424 6231529
* 6221101 6234263 6535542 6591971 6593946 6795561 7190219
* 6221101 6234263 6535542 6591971 6593946 6795561 7190219 7199551
* @author Mark Reinhold
*/
......
......@@ -335,7 +335,7 @@ public class BasicByte
fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
}
private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
boolean caught = false;
try {
thunk.run();
......@@ -350,7 +350,7 @@ public class BasicByte
fail(ex.getName() + " not thrown", b);
}
private static void tryCatch(byte [] t, Class ex, Runnable thunk) {
private static void tryCatch(byte [] t, Class<?> ex, Runnable thunk) {
tryCatch(ByteBuffer.wrap(t), ex, thunk);
}
......@@ -681,6 +681,14 @@ public class BasicByte
bulkPutBuffer(rb);
}});
// put(ByteBuffer) should not change source position
final ByteBuffer src = ByteBuffer.allocate(1);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.put(src);
}});
ck(src, src.position(), 0);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.compact();
......@@ -744,6 +752,22 @@ public class BasicByte
if (rb.getClass().getName().startsWith("java.nio.Heap")) {
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
......
......@@ -335,7 +335,7 @@ public class BasicChar
fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
}
private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
boolean caught = false;
try {
thunk.run();
......@@ -350,7 +350,7 @@ public class BasicChar
fail(ex.getName() + " not thrown", b);
}
private static void tryCatch(char [] t, Class ex, Runnable thunk) {
private static void tryCatch(char [] t, Class<?> ex, Runnable thunk) {
tryCatch(CharBuffer.wrap(t), ex, thunk);
}
......@@ -681,6 +681,14 @@ public class BasicChar
bulkPutBuffer(rb);
}});
// put(CharBuffer) should not change source position
final CharBuffer src = CharBuffer.allocate(1);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.put(src);
}});
ck(src, src.position(), 0);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.compact();
......@@ -741,6 +749,22 @@ public class BasicChar
// 7199551
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
String s = new String(new char[rb.remaining() + 1]);
rb.put(s);
}});
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
String s = new String(new char[rb.remaining() + 1]);
rb.append(s);
}});
......
......@@ -335,7 +335,7 @@ public class BasicDouble
fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
}
private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
boolean caught = false;
try {
thunk.run();
......@@ -350,7 +350,7 @@ public class BasicDouble
fail(ex.getName() + " not thrown", b);
}
private static void tryCatch(double [] t, Class ex, Runnable thunk) {
private static void tryCatch(double [] t, Class<?> ex, Runnable thunk) {
tryCatch(DoubleBuffer.wrap(t), ex, thunk);
}
......@@ -681,6 +681,14 @@ public class BasicDouble
bulkPutBuffer(rb);
}});
// put(DoubleBuffer) should not change source position
final DoubleBuffer src = DoubleBuffer.allocate(1);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.put(src);
}});
ck(src, src.position(), 0);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.compact();
......@@ -727,6 +735,22 @@ public class BasicDouble
......
......@@ -335,7 +335,7 @@ public class BasicFloat
fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
}
private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
boolean caught = false;
try {
thunk.run();
......@@ -350,7 +350,7 @@ public class BasicFloat
fail(ex.getName() + " not thrown", b);
}
private static void tryCatch(float [] t, Class ex, Runnable thunk) {
private static void tryCatch(float [] t, Class<?> ex, Runnable thunk) {
tryCatch(FloatBuffer.wrap(t), ex, thunk);
}
......@@ -681,6 +681,14 @@ public class BasicFloat
bulkPutBuffer(rb);
}});
// put(FloatBuffer) should not change source position
final FloatBuffer src = FloatBuffer.allocate(1);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.put(src);
}});
ck(src, src.position(), 0);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.compact();
......@@ -727,6 +735,22 @@ public class BasicFloat
......
......@@ -335,7 +335,7 @@ public class BasicInt
fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
}
private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
boolean caught = false;
try {
thunk.run();
......@@ -350,7 +350,7 @@ public class BasicInt
fail(ex.getName() + " not thrown", b);
}
private static void tryCatch(int [] t, Class ex, Runnable thunk) {
private static void tryCatch(int [] t, Class<?> ex, Runnable thunk) {
tryCatch(IntBuffer.wrap(t), ex, thunk);
}
......@@ -681,6 +681,14 @@ public class BasicInt
bulkPutBuffer(rb);
}});
// put(IntBuffer) should not change source position
final IntBuffer src = IntBuffer.allocate(1);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.put(src);
}});
ck(src, src.position(), 0);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.compact();
......@@ -727,6 +735,22 @@ public class BasicInt
......
......@@ -335,7 +335,7 @@ public class BasicLong
fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
}
private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
boolean caught = false;
try {
thunk.run();
......@@ -350,7 +350,7 @@ public class BasicLong
fail(ex.getName() + " not thrown", b);
}
private static void tryCatch(long [] t, Class ex, Runnable thunk) {
private static void tryCatch(long [] t, Class<?> ex, Runnable thunk) {
tryCatch(LongBuffer.wrap(t), ex, thunk);
}
......@@ -681,6 +681,14 @@ public class BasicLong
bulkPutBuffer(rb);
}});
// put(LongBuffer) should not change source position
final LongBuffer src = LongBuffer.allocate(1);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.put(src);
}});
ck(src, src.position(), 0);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.compact();
......@@ -727,6 +735,22 @@ public class BasicLong
......
......@@ -335,7 +335,7 @@ public class BasicShort
fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
}
private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
boolean caught = false;
try {
thunk.run();
......@@ -350,7 +350,7 @@ public class BasicShort
fail(ex.getName() + " not thrown", b);
}
private static void tryCatch(short [] t, Class ex, Runnable thunk) {
private static void tryCatch(short [] t, Class<?> ex, Runnable thunk) {
tryCatch(ShortBuffer.wrap(t), ex, thunk);
}
......@@ -681,6 +681,14 @@ public class BasicShort
bulkPutBuffer(rb);
}});
// put(ShortBuffer) should not change source position
final ShortBuffer src = ShortBuffer.allocate(1);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.put(src);
}});
ck(src, src.position(), 0);
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
public void run() {
rb.compact();
......@@ -727,6 +735,22 @@ public class BasicShort
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册