diff --git a/README.html b/README.html
index 30d9f83e..0588b866 100644
--- a/README.html
+++ b/README.html
@@ -822,6 +822,7 @@ and LuaForge:
| 3.0-alpha3 |
- Fix bug 3597515 memory leak due to string caching by simplifying caching logic.
- Fix bug 3565008 so that short substrings are backed by short arrays.
+- Fix bug 3495802 to return correct offset of substrings from string.find().
|
diff --git a/src/core/org/luaj/vm2/LuaString.java b/src/core/org/luaj/vm2/LuaString.java
index b7cc6641..731dfa65 100644
--- a/src/core/org/luaj/vm2/LuaString.java
+++ b/src/core/org/luaj/vm2/LuaString.java
@@ -516,9 +516,9 @@ public class LuaString extends LuaValue {
*/
public int indexOf( LuaString s, int start ) {
final int slen = s.length();
- final int limit = m_offset + m_length - slen;
- for ( int i = m_offset + start; i <= limit; ++i ) {
- if ( equals( m_bytes, i, s.m_bytes, s.m_offset, slen ) ) {
+ final int limit = m_length - slen;
+ for ( int i = start; i <= limit; ++i ) {
+ if ( equals( m_bytes, m_offset + i, s.m_bytes, s.m_offset, slen ) ) {
return i;
}
}
diff --git a/test/junit/org/luaj/vm2/FragmentsTest.java b/test/junit/org/luaj/vm2/FragmentsTest.java
index e9fe961a..3972fc9e 100644
--- a/test/junit/org/luaj/vm2/FragmentsTest.java
+++ b/test/junit/org/luaj/vm2/FragmentsTest.java
@@ -560,5 +560,14 @@ public class FragmentsTest extends TestSuite {
runFragment( LuaValue.varargsOf(LuaValue.FALSE, LuaValue.NIL),
"return pcall(error)\n");
}
+
+
+ public void testFindWithOffset() {
+ runFragment(LuaValue.varargsOf(LuaValue.valueOf(8), LuaValue.valueOf(5)),
+ "string = \"abcdef:ghi\"\n" +
+ "substring = string:sub(3)\n" +
+ "idx = substring:find(\":\")\n" +
+ "return #substring, idx\n");
+ }
}
}