summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--array.c2
2 files changed, 6 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 9c5f3fe108..440d70f729 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Sep 10 13:44:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_cycle): avoid infinite loop for empty array.
+ based on a patch from David Flanagan. [ruby-core:12085]
+
Mon Sep 10 01:21:23 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
* marshal.c (r_object0): struct allocation first to check if a
diff --git a/array.c b/array.c
index 3b9a294d95..6ab12a4d76 100644
--- a/array.c
+++ b/array.c
@@ -2939,7 +2939,7 @@ rb_ary_cycle(VALUE ary)
long i;
RETURN_ENUMERATOR(ary, 0, 0);
- for (;;) {
+ while (RARRAY_LEN(ary) > 0) {
for (i=0; i<RARRAY_LEN(ary); i++) {
rb_yield(RARRAY_PTR(ary)[i]);
}