aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-12-16 01:12:09 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-12-16 01:12:09 +0000
commitc27920c1a9e8f6aa84caff98b5202baf71c8f957 (patch)
tree6774e5a99e7a96436f5e1025a28392f22d829ab8
parent220a9924a592fd663ace4ca3c9dd16fb674c7a14 (diff)
downloadruby-c27920c1a9e8f6aa84caff98b5202baf71c8f957.tar.gz
fix chomping newline only line
* string.c (chomp_newline): fix chomping newline only line. rb_enc_prev_char return NULL if no previous character and must not call rb_enc_ascget on it. a patch by Ary Borenszweig <asterite AT gmail.com> at [ruby-core:78666]. [Bug #13037] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57088 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--string.c2
-rw-r--r--test/ruby/test_string.rb12
2 files changed, 13 insertions, 1 deletions
diff --git a/string.c b/string.c
index 8515773a84..fd17355346 100644
--- a/string.c
+++ b/string.c
@@ -7409,7 +7409,7 @@ chomp_newline(const char *p, const char *e, rb_encoding *enc)
if (rb_enc_is_newline(prev, e, enc)) {
e = prev;
prev = rb_enc_prev_char(p, e, e, enc);
- if (rb_enc_ascget(prev, e, NULL, enc) == '\r')
+ if (prev && rb_enc_ascget(prev, e, NULL, enc) == '\r')
e = prev;
}
return e;
diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb
index 39477be220..d2fbd00a1d 100644
--- a/test/ruby/test_string.rb
+++ b/test/ruby/test_string.rb
@@ -843,6 +843,18 @@ CODE
assert_equal "hello", S("hello\nworld").each_line(chomp: true).next
assert_equal "hello\nworld", S("hello\nworld").each_line(nil, chomp: true).next
+
+ res = []
+ S("").each_line(chomp: true) {|x| res << x}
+ assert_equal([], res)
+
+ res = []
+ S("\n").each_line(chomp: true) {|x| res << x}
+ assert_equal([S("")], res)
+
+ res = []
+ S("\r\n").each_line(chomp: true) {|x| res << x}
+ assert_equal([S("")], res)
end
def test_lines