aboutsummaryrefslogtreecommitdiffstats
path: root/enum.c
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2022-03-22 12:45:51 -0700
committerJeremy Evans <code@jeremyevans.net>2022-03-23 07:55:49 -0700
commit8f1c69f27ce6b3f5ed1c1cf8d2aa62aa9701d636 (patch)
treea824fa5c87113ddbb982b541819d266d5161e588 /enum.c
parentd32fa986c3631fddcb256dbd39d10b358fb40ead (diff)
downloadruby-8f1c69f27ce6b3f5ed1c1cf8d2aa62aa9701d636.tar.gz
Raise ArgumentError when calling Enumberable#inject without block or arguments
Previously, this would work as expected if the enumerable contained 0 or 1 element, and would raise LocalJumpError otherwise. That inconsistent behavior is likely to lead to bugs. Fixes [Bug #18635]
Diffstat (limited to 'enum.c')
-rw-r--r--enum.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/enum.c b/enum.c
index 519d8873f6..383619999b 100644
--- a/enum.c
+++ b/enum.c
@@ -1010,8 +1010,16 @@ enum_inject(int argc, VALUE *argv, VALUE obj)
VALUE init, op;
rb_block_call_func *iter = inject_i;
ID id;
+ int num_args;
- switch (rb_scan_args(argc, argv, "02", &init, &op)) {
+ if (rb_block_given_p()) {
+ num_args = rb_scan_args(argc, argv, "02", &init, &op);
+ }
+ else {
+ num_args = rb_scan_args(argc, argv, "11", &init, &op);
+ }
+
+ switch (num_args) {
case 0:
init = Qundef;
break;