From 321346cfa5fca9da246d83588fbaae2f79fc6069 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 30 Jul 2011 14:14:46 +0000 Subject: * io.c (rb_io_each_byte): rbuf can be refreshed during yield. [Bug #5119] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32758 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- io.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'io.c') diff --git a/io.c b/io.c index a1742637df..5fa8ba7aa8 100644 --- a/io.c +++ b/io.c @@ -2829,13 +2829,10 @@ rb_io_each_byte(VALUE io) GetOpenFile(io, fptr); for (;;) { - p = fptr->rbuf.ptr+fptr->rbuf.off; - e = p + fptr->rbuf.len; - while (p < e) { - fptr->rbuf.off++; - fptr->rbuf.len--; + while (fptr->rbuf.len > 0) { + p = fptr->rbuf.ptr + fptr->rbuf.off++; + e = p + fptr->rbuf.len--; rb_yield(INT2FIX(*p & 0xff)); - p++; errno = 0; } rb_io_check_byte_readable(fptr); -- cgit v1.2.3