diff --git a/ext/jruby/org/jruby/ext/strscan/RubyStringScanner.java b/ext/jruby/org/jruby/ext/strscan/RubyStringScanner.java index 631421729e..1dc3c826d9 100644 --- a/ext/jruby/org/jruby/ext/strscan/RubyStringScanner.java +++ b/ext/jruby/org/jruby/ext/strscan/RubyStringScanner.java @@ -874,7 +874,7 @@ private RubyString newString(Ruby runtime, int start, int length) { ByteList byteList = str.getByteList(); int begin = byteList.begin(); - ByteList newByteList = new ByteList(byteList.unsafeBytes(), begin + start, begin + length, byteList.getEncoding(), true); + ByteList newByteList = new ByteList(byteList.unsafeBytes(), begin + start, length, byteList.getEncoding(), true); return RubyString.newString(runtime, newByteList); } diff --git a/test/strscan/test_stringscanner.rb b/test/strscan/test_stringscanner.rb index d15c1d8568..2a127a773a 100644 --- a/test/strscan/test_stringscanner.rb +++ b/test/strscan/test_stringscanner.rb @@ -841,4 +841,12 @@ def test_skip_with_begenning_of_line_anchor_not_match assert_equal 1, s.skip(/a/) assert_nil s.skip(/^b/) end + + # ruby/strscan#86 + def test_scan_shared_string + s = "hellohello"[5..-1] + ss = StringScanner.new(s).scan(/hello/) + + assert_equal "hello", ss + end end