summaryrefslogtreecommitdiffstats
path: root/hash.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-09-21 03:08:33 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-09-21 03:08:33 +0000
commit8f8c619b358188e099c2e7c0da3f35fa30172b0d (patch)
treeae0c8f703dca2b6ae94a5b5518c736d373bca377 /hash.c
parent00bc2257cd51bef584fb396c3c2d9831d9a8943e (diff)
downloadruby-8f8c619b358188e099c2e7c0da3f35fa30172b0d.tar.gz
ruby-8f8c619b358188e099c2e7c0da3f35fa30172b0d.tar.xz
ruby-8f8c619b358188e099c2e7c0da3f35fa30172b0d.zip
* enum.c (enum_sort_by): do not use qsort directly. use
rb_ary_sort_bang() instead. [ruby-dev:24291] * enum.c (enum_sort_by): pedantic type check added. [ruby-dev:24291] * hash.c (rb_hash_foreach_iter): check iter_lev after each iteration. [ruby-dev:24289] * array.c (rb_ary_and): element size might change during comparison. [ruby-dev:24290] * array.c (rb_ary_or): ditto. [ruby-dev:24292] * array.c (rb_ary_equal): wrong fix. [ruby-dev:24286] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@6939 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'hash.c')
-rw-r--r--hash.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/hash.c b/hash.c
index 06b78de76..89d5461e7 100644
--- a/hash.c
+++ b/hash.c
@@ -131,9 +131,13 @@ rb_hash_foreach_iter(key, value, arg)
if (key == Qundef) return ST_CONTINUE;
status = (*arg->func)(key, value, arg->arg);
- if (RHASH(arg->hash)->tbl != tbl || RHASH(arg->hash)->tbl->bins != bins){
+ if (RHASH(arg->hash)->tbl != tbl ||
+ RHASH(arg->hash)->tbl->bins != bins) {
rb_raise(rb_eIndexError, "rehash occurred during iteration");
}
+ if (RHASH(arg->hash)->iter_lev == 0) {
+ rb_raise(rb_eArgError, "block re-entered");
+ }
return status;
}