From bba5e1126b62b24388a19e27f5002d15e15cdae3 Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 8 Feb 2010 15:08:15 +0000 Subject: [PATCH] * io.c (rb_io_getline_fast): wrong calculation of new position from rb_str_coderange_scan_restartable(). [ruby-core:28103] * io.c (read_all): ditto. * sprintf.c (rb_str_format): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26622 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 9 +++++++++ io.c | 2 +- sprintf.c | 4 ++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index aeeb5b70af..95857fac44 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Mon Feb 8 23:49:24 2010 Yukihiro Matsumoto + + * io.c (rb_io_getline_fast): wrong calculation of new position + from rb_str_coderange_scan_restartable(). [ruby-core:28103] + + * io.c (read_all): ditto. + + * sprintf.c (rb_str_format): ditto. + Mon Feb 8 21:03:53 2010 Tanaka Akira * ext/socket/socket.c (socket_s_ip_address_list): obtain the scope_id diff --git a/io.c b/io.c index 4017778e0c..8926c315f1 100644 --- a/io.c +++ b/io.c @@ -2287,7 +2287,7 @@ rb_io_getline_fast(rb_io_t *fptr, rb_encoding *enc) } len += pending; if (cr != ENC_CODERANGE_BROKEN) - pos = rb_str_coderange_scan_restartable(RSTRING_PTR(str) + pos, RSTRING_PTR(str) + len, enc, &cr); + pos += rb_str_coderange_scan_restartable(RSTRING_PTR(str) + pos, RSTRING_PTR(str) + len, enc, &cr); if (e) break; } rb_thread_wait_fd(fptr->fd); diff --git a/sprintf.c b/sprintf.c index b5cad94fd7..bec0569b5c 100644 --- a/sprintf.c +++ b/sprintf.c @@ -483,7 +483,7 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt) for (t = p; t < end && *t != '%'; t++) ; PUSH(p, t - p); if (coderange != ENC_CODERANGE_BROKEN && scanned < blen) { - scanned = rb_str_coderange_scan_restartable(buf+scanned, buf+blen, enc, &coderange); + scanned += rb_str_coderange_scan_restartable(buf+scanned, buf+blen, enc, &coderange); ENC_CODERANGE_SET(result, coderange); } if (t >= end) { @@ -672,7 +672,7 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt) rb_str_set_len(result, blen); if (coderange != ENC_CODERANGE_BROKEN && scanned < blen) { int cr = coderange; - scanned = rb_str_coderange_scan_restartable(buf+scanned, buf+blen, enc, &cr); + scanned += rb_str_coderange_scan_restartable(buf+scanned, buf+blen, enc, &cr); ENC_CODERANGE_SET(result, (cr == ENC_CODERANGE_UNKNOWN ? ENC_CODERANGE_BROKEN : (coderange = cr)));