From 1f89f30239ee97e9a8155d92824724920d617b68 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Sun, 27 Jan 2013 16:14:03 +0000 Subject: [PATCH] Fix bug 3495802 to return correct offset of substrings from string.find() --- README.html | 1 + src/core/org/luaj/vm2/LuaString.java | 6 +++--- test/junit/org/luaj/vm2/FragmentsTest.java | 9 +++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) 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 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"); + } } }