summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--eval_error.c2
-rw-r--r--test/ruby/test_exception.rb12
-rw-r--r--version.h2
4 files changed, 20 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index b6db2ed116..ece08bf7e4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Sat Jan 17 16:47:20 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * eval_error.c (error_print): pos and len parameters of rb_str_substr()
+ are counted by characters, not bytes. use rb_str_subseq() instead.
+ [Bug #10727] [ruby-core:67473]
+
Sat Jan 17 16:35:59 2015 Seiei Higa <hanachin@gmail.com>
* vm_method.c (rb_export_method): bail out if the original method
diff --git a/eval_error.c b/eval_error.c
index 12cfe36571..405d738236 100644
--- a/eval_error.c
+++ b/eval_error.c
@@ -169,7 +169,7 @@ error_print(void)
warn_print(")\n");
}
if (tail) {
- warn_print_str(rb_str_substr(e, tail - einfo, elen - len - 1));
+ warn_print_str(rb_str_subseq(e, tail - einfo, elen - len - 1));
}
if (tail ? einfo[elen-1] != '\n' : !epath) warn_print2("\n", 1);
}
diff --git a/test/ruby/test_exception.rb b/test/ruby/test_exception.rb
index 6876d6dc9c..c68d226333 100644
--- a/test/ruby/test_exception.rb
+++ b/test/ruby/test_exception.rb
@@ -686,4 +686,16 @@ $stderr = $stdout; raise "\x82\xa0"') do |outs, errs, status|
assert_match /\u3042/, err
end
end
+
+ def test_multibyte_and_newline
+ bug10727 = '[ruby-core:67473] [Bug #10727]'
+ assert_in_out_err([], <<-'end;', [], /\u{306b 307b 3093 3054} \(E\)\n\u{6539 884c}/, bug10727, encoding: "UTF-8")
+ class E < StandardError
+ def initialize
+ super("\u{306b 307b 3093 3054}\n\u{6539 884c}")
+ end
+ end
+ raise E
+ end;
+ end
end
diff --git a/version.h b/version.h
index f74f0ad712..92cd516e40 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.2.0"
#define RUBY_RELEASE_DATE "2015-01-17"
-#define RUBY_PATCHLEVEL 20
+#define RUBY_PATCHLEVEL 21
#define RUBY_RELEASE_YEAR 2015
#define RUBY_RELEASE_MONTH 1