From c550df63c678d05547b8fed04aeb3f955c66efc9 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Thu, 17 May 2012 12:02:27 -0500 Subject: [PATCH] Fix #174 [JRUBY-6668] StringScanner#scan_until spins forever on UTF-8 data We were not preparing the regex properly. Added that, and the given example completes normally. --- src/org/jruby/RubyRegexp.java | 2 +- src/org/jruby/ext/strscan/RubyStringScanner.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/org/jruby/RubyRegexp.java b/src/org/jruby/RubyRegexp.java index e9e04691434..16ac07a2540 100644 --- a/src/org/jruby/RubyRegexp.java +++ b/src/org/jruby/RubyRegexp.java @@ -396,7 +396,7 @@ private Encoding checkEncoding(RubyString str, boolean warn) { return enc; } - final Regex preparePattern(RubyString str) { + public final Regex preparePattern(RubyString str) { check(); Encoding enc = checkEncoding(str, true); if (enc == pattern.getEncoding()) return pattern; diff --git a/src/org/jruby/ext/strscan/RubyStringScanner.java b/src/org/jruby/ext/strscan/RubyStringScanner.java index 822a59b6265..4eee7ad6b00 100644 --- a/src/org/jruby/ext/strscan/RubyStringScanner.java +++ b/src/org/jruby/ext/strscan/RubyStringScanner.java @@ -227,10 +227,11 @@ private IRubyObject extractBegLen(Ruby runtime, int beg, int len) { } private IRubyObject scan(IRubyObject regex, boolean succptr, boolean getstr, boolean headonly) { - if (!(regex instanceof RubyRegexp)) throw getRuntime().newTypeError("wrong argument type " + regex.getMetaClass() + " (expected Regexp)"); + Ruby runtime = getRuntime(); + if (!(regex instanceof RubyRegexp)) throw runtime.newTypeError("wrong argument type " + regex.getMetaClass() + " (expected Regexp)"); check(); - Regex pattern = ((RubyRegexp)regex).getPattern(); + Regex pattern = ((RubyRegexp)regex).preparePattern(str); clearMatched(); int rest = str.getByteList().getRealSize() - pos;