From ca437aeb395e77125fcd2ab9bc83bbcd3e357610 Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Tue, 14 Mar 2023 10:12:32 +0100 Subject: rb_ary_sum: don't enter fast path if initial isn't a native numeric type. [Bug #19530] If the initial value isn't one of the special cased types, we directly jump to the slow path. --- array.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'array.c') diff --git a/array.c b/array.c index 6a2f94c8b2..83d1c9ced6 100644 --- a/array.c +++ b/array.c @@ -8181,6 +8181,12 @@ rb_ary_sum(int argc, VALUE *argv, VALUE ary) n = 0; r = Qundef; + + if (!FIXNUM_P(v) && !RB_BIGNUM_TYPE_P(v) && !RB_TYPE_P(v, T_RATIONAL)) { + i = 0; + goto init_is_a_value; + } + for (i = 0; i < RARRAY_LEN(ary); i++) { e = RARRAY_AREF(ary, i); if (block_given) @@ -8265,6 +8271,7 @@ rb_ary_sum(int argc, VALUE *argv, VALUE ary) } goto has_some_value; + init_is_a_value: for (; i < RARRAY_LEN(ary); i++) { e = RARRAY_AREF(ary, i); if (block_given) -- cgit v1.2.3