diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/Text.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/Text.java index 86fb1ff9a54a2..a83685fae23b4 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/Text.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/Text.java @@ -199,10 +199,9 @@ public int find(String what, int start) { int pos = src.position()-1; while (tgt.hasRemaining()) { if (!src.hasRemaining()) { // src expired first - tgt.reset(); - src.reset(); - found = false; - break; + // the remaining bytes in src will always smaller than tgt, + // so we can return -1 directly + return -1; } if (!(tgt.get() == src.get())) { tgt.reset(); diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/TestText.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/TestText.java index 7ae5d7d7ca051..8afd8361e24bb 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/TestText.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/TestText.java @@ -22,6 +22,7 @@ import java.nio.BufferUnderflowException; import java.nio.ByteBuffer; import java.nio.charset.CharacterCodingException; +import java.util.Arrays; import java.util.Random; import org.apache.hadoop.thirdparty.com.google.common.base.Charsets; import org.apache.hadoop.thirdparty.com.google.common.primitives.Bytes; @@ -238,6 +239,18 @@ public void testFind() throws Exception { assertThat(text.find("ac")).isEqualTo(-1); assertThat(text.find("\u20ac")).isEqualTo(4); assertThat(text.find("\u20ac", 5)).isEqualTo(11); + assertThat(text.find("cd\u20acq")).isEqualTo(-1); + } + + @Test(timeout = 10000) + public void testFindWithTimeout() throws Exception { + byte[] bytes = new byte[1000000]; + Arrays.fill(bytes, (byte) 97); + String what = new String(bytes); + bytes[0] = (byte) 98; + Text text = new Text(bytes); + + assertThat(text.find(what)).isEqualTo(-1); } @Test