HADOOP-11040. Return value of read(ByteBuffer buf) in CryptoInputStream is incorrect in some cases. (Yi Liu via wang)
This commit is contained in:
parent
123f20d42f
commit
47e5e19831
|
@ -732,6 +732,9 @@ Release 2.6.0 - UNRELEASED
|
||||||
HDFS-7075. hadoop-fuse-dfs fails because it cannot find
|
HDFS-7075. hadoop-fuse-dfs fails because it cannot find
|
||||||
JavaKeyStoreProvider$Factory (cmccabe)
|
JavaKeyStoreProvider$Factory (cmccabe)
|
||||||
|
|
||||||
|
HADOOP-11040. Return value of read(ByteBuffer buf) in CryptoInputStream is
|
||||||
|
incorrect in some cases. (Yi Liu via wang)
|
||||||
|
|
||||||
BREAKDOWN OF HDFS-6134 AND HADOOP-10150 SUBTASKS AND RELATED JIRAS
|
BREAKDOWN OF HDFS-6134 AND HADOOP-10150 SUBTASKS AND RELATED JIRAS
|
||||||
|
|
||||||
HADOOP-10734. Implement high-performance secure random number sources.
|
HADOOP-10734. Implement high-performance secure random number sources.
|
||||||
|
|
|
@ -471,7 +471,16 @@ public class CryptoInputStream extends FilterInputStream implements
|
||||||
streamOffset += n; // Read n bytes
|
streamOffset += n; // Read n bytes
|
||||||
decrypt(buf, n, pos);
|
decrypt(buf, n, pos);
|
||||||
}
|
}
|
||||||
return n;
|
|
||||||
|
if (n >= 0) {
|
||||||
|
return unread + n;
|
||||||
|
} else {
|
||||||
|
if (unread == 0) {
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
return unread;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new UnsupportedOperationException("ByteBuffer read unsupported " +
|
throw new UnsupportedOperationException("ByteBuffer read unsupported " +
|
||||||
|
|
|
@ -469,6 +469,7 @@ public abstract class CryptoStreamsTestBase {
|
||||||
int bufPos) throws Exception {
|
int bufPos) throws Exception {
|
||||||
buf.position(bufPos);
|
buf.position(bufPos);
|
||||||
int n = ((ByteBufferReadable) in).read(buf);
|
int n = ((ByteBufferReadable) in).read(buf);
|
||||||
|
Assert.assertEquals(bufPos + n, buf.position());
|
||||||
byte[] readData = new byte[n];
|
byte[] readData = new byte[n];
|
||||||
buf.rewind();
|
buf.rewind();
|
||||||
buf.position(bufPos);
|
buf.position(bufPos);
|
||||||
|
@ -568,6 +569,7 @@ public abstract class CryptoStreamsTestBase {
|
||||||
// Read forward len1
|
// Read forward len1
|
||||||
ByteBuffer buf = ByteBuffer.allocate(len1);
|
ByteBuffer buf = ByteBuffer.allocate(len1);
|
||||||
int nRead = ((ByteBufferReadable) in).read(buf);
|
int nRead = ((ByteBufferReadable) in).read(buf);
|
||||||
|
Assert.assertEquals(nRead, buf.position());
|
||||||
readData = new byte[nRead];
|
readData = new byte[nRead];
|
||||||
buf.rewind();
|
buf.rewind();
|
||||||
buf.get(readData);
|
buf.get(readData);
|
||||||
|
@ -575,9 +577,10 @@ public abstract class CryptoStreamsTestBase {
|
||||||
System.arraycopy(data, (int)pos, expectedData, 0, nRead);
|
System.arraycopy(data, (int)pos, expectedData, 0, nRead);
|
||||||
Assert.assertArrayEquals(readData, expectedData);
|
Assert.assertArrayEquals(readData, expectedData);
|
||||||
|
|
||||||
// Pos should be len1 + 2 * len2 + nRead
|
long lastPos = pos;
|
||||||
|
// Pos should be lastPos + nRead
|
||||||
pos = ((Seekable) in).getPos();
|
pos = ((Seekable) in).getPos();
|
||||||
Assert.assertEquals(len1 + 2 * len2 + nRead, pos);
|
Assert.assertEquals(lastPos + nRead, pos);
|
||||||
|
|
||||||
// Pos: 1/3 dataLen
|
// Pos: 1/3 dataLen
|
||||||
positionedReadCheck(in , dataLen / 3);
|
positionedReadCheck(in , dataLen / 3);
|
||||||
|
@ -589,13 +592,15 @@ public abstract class CryptoStreamsTestBase {
|
||||||
System.arraycopy(data, (int)pos, expectedData, 0, len1);
|
System.arraycopy(data, (int)pos, expectedData, 0, len1);
|
||||||
Assert.assertArrayEquals(readData, expectedData);
|
Assert.assertArrayEquals(readData, expectedData);
|
||||||
|
|
||||||
// Pos should be 2 * len1 + 2 * len2 + nRead
|
lastPos = pos;
|
||||||
|
// Pos should be lastPos + len1
|
||||||
pos = ((Seekable) in).getPos();
|
pos = ((Seekable) in).getPos();
|
||||||
Assert.assertEquals(2 * len1 + 2 * len2 + nRead, pos);
|
Assert.assertEquals(lastPos + len1, pos);
|
||||||
|
|
||||||
// Read forward len1
|
// Read forward len1
|
||||||
buf = ByteBuffer.allocate(len1);
|
buf = ByteBuffer.allocate(len1);
|
||||||
nRead = ((ByteBufferReadable) in).read(buf);
|
nRead = ((ByteBufferReadable) in).read(buf);
|
||||||
|
Assert.assertEquals(nRead, buf.position());
|
||||||
readData = new byte[nRead];
|
readData = new byte[nRead];
|
||||||
buf.rewind();
|
buf.rewind();
|
||||||
buf.get(readData);
|
buf.get(readData);
|
||||||
|
@ -603,6 +608,11 @@ public abstract class CryptoStreamsTestBase {
|
||||||
System.arraycopy(data, (int)pos, expectedData, 0, nRead);
|
System.arraycopy(data, (int)pos, expectedData, 0, nRead);
|
||||||
Assert.assertArrayEquals(readData, expectedData);
|
Assert.assertArrayEquals(readData, expectedData);
|
||||||
|
|
||||||
|
lastPos = pos;
|
||||||
|
// Pos should be lastPos + nRead
|
||||||
|
pos = ((Seekable) in).getPos();
|
||||||
|
Assert.assertEquals(lastPos + nRead, pos);
|
||||||
|
|
||||||
// ByteBuffer read after EOF
|
// ByteBuffer read after EOF
|
||||||
((Seekable) in).seek(dataLen);
|
((Seekable) in).seek(dataLen);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
|
|
Loading…
Reference in New Issue