You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/01/17 14:05:10 UTC

[34/50] [abbrv] ignite git commit: IGNITE-4503: Hadoop: added boundary checks to HadoopDirectDataInput. This closes # 1416.

IGNITE-4503: Hadoop: added boundary checks to HadoopDirectDataInput. This closes # 1416.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f1365421
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f1365421
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f1365421

Branch: refs/heads/ignite-gg-11810-1
Commit: f1365421c299b754a10edf8b6f156aeeb5ff0ce1
Parents: d14e072
Author: tledkov-gridgain <tl...@gridgain.com>
Authored: Mon Jan 16 16:57:27 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Jan 16 16:57:27 2017 +0300

----------------------------------------------------------------------
 .../shuffle/direct/HadoopDirectDataInput.java   | 41 +++++++++++++++++++-
 1 file changed, 39 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f1365421/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/direct/HadoopDirectDataInput.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/direct/HadoopDirectDataInput.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/direct/HadoopDirectDataInput.java
index 6f0e2b0..8031c9f 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/direct/HadoopDirectDataInput.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/direct/HadoopDirectDataInput.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.processors.hadoop.shuffle.direct;
 
+import java.io.EOFException;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.typedef.internal.SB;
 import org.jetbrains.annotations.NotNull;
@@ -59,6 +60,8 @@ public class HadoopDirectDataInput extends InputStream implements DataInput {
 
     /** {@inheritDoc} */
     @Override public void readFully(@NotNull byte[] b, int off, int len) throws IOException {
+        checkRange(len);
+
         System.arraycopy(buf, pos, b, off, len);
 
         pos += len;
@@ -66,9 +69,16 @@ public class HadoopDirectDataInput extends InputStream implements DataInput {
 
     /** {@inheritDoc} */
     @Override public int skipBytes(int n) throws IOException {
-        pos += n;
+        if (n < 0)
+            throw new IllegalArgumentException();
+
+        assert pos <= buf.length;
+
+        int toSkip = Math.min(buf.length - pos, n);
 
-        return n;
+        pos += toSkip;
+
+        return toSkip;
     }
 
     /** {@inheritDoc} */
@@ -78,6 +88,8 @@ public class HadoopDirectDataInput extends InputStream implements DataInput {
 
     /** {@inheritDoc} */
     @Override public byte readByte() throws IOException {
+        checkRange(1);
+
         byte res = GridUnsafe.getByte(buf, BYTE_ARR_OFF + pos);
 
         pos += 1;
@@ -92,6 +104,8 @@ public class HadoopDirectDataInput extends InputStream implements DataInput {
 
     /** {@inheritDoc} */
     @Override public short readShort() throws IOException {
+        checkRange(2);
+
         short res = GridUnsafe.getShort(buf, BYTE_ARR_OFF + pos);
 
         pos += 2;
@@ -106,6 +120,8 @@ public class HadoopDirectDataInput extends InputStream implements DataInput {
 
     /** {@inheritDoc} */
     @Override public char readChar() throws IOException {
+        checkRange(2);
+
         char res = GridUnsafe.getChar(buf, BYTE_ARR_OFF + pos);
 
         pos += 2;
@@ -115,6 +131,8 @@ public class HadoopDirectDataInput extends InputStream implements DataInput {
 
     /** {@inheritDoc} */
     @Override public int readInt() throws IOException {
+        checkRange(4);
+
         int res = GridUnsafe.getInt(buf, BYTE_ARR_OFF + pos);
 
         pos += 4;
@@ -124,6 +142,8 @@ public class HadoopDirectDataInput extends InputStream implements DataInput {
 
     /** {@inheritDoc} */
     @Override public long readLong() throws IOException {
+        checkRange(8);
+
         long res = GridUnsafe.getLong(buf, BYTE_ARR_OFF + pos);
 
         pos += 8;
@@ -133,6 +153,8 @@ public class HadoopDirectDataInput extends InputStream implements DataInput {
 
     /** {@inheritDoc} */
     @Override public float readFloat() throws IOException {
+        checkRange(4);
+
         float res = GridUnsafe.getFloat(buf, BYTE_ARR_OFF + pos);
 
         pos += 4;
@@ -142,6 +164,8 @@ public class HadoopDirectDataInput extends InputStream implements DataInput {
 
     /** {@inheritDoc} */
     @Override public double readDouble() throws IOException {
+        checkRange(8);
+
         double res = GridUnsafe.getDouble(buf, BYTE_ARR_OFF + pos);
 
         pos += 8;
@@ -193,4 +217,17 @@ public class HadoopDirectDataInput extends InputStream implements DataInput {
 
         return new String(bytes, StandardCharsets.UTF_8);
     }
+
+    /**
+     * Ensures the position is still within the buffer.
+     *
+     * @throws EOFException if an attempt is made to read beyond the buffer end.
+     */
+    private void checkRange(int bytesToRead) throws EOFException {
+        assert bytesToRead > 0;
+
+        if (pos + bytesToRead - 1 >= buf.length)
+            throw new EOFException("Attempt to read beyond the end of buffer: " + (pos + bytesToRead - 1)
+                + " >= " + buf.length);
+    }
 }