From: "jeremyevans0 (Jeremy Evans) via ruby-core" Date: 2025-12-02T17:11:00+00:00 Subject: [ruby-core:123984] [Ruby Bug#21757] Splatted args array is mutated when passing unexpected kwargs Issue #21757 has been updated by jeremyevans0 (Jeremy Evans). Assignee set to jeremyevans0 (Jeremy Evans) Backport changed from 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN to 3.2: DONTNEED, 3.3: DONTNEED, 3.4: REQUIRED Thank you for the report. This is a bug in the allocationless anonymous splat optimization in Ruby 3.4, still present in the master branch. I'll work on a fix. ---------------------------------------- Bug #21757: Splatted args array is mutated when passing unexpected kwargs https://bugs.ruby-lang.org/issues/21757#change-115412 * Author: apotonick (Nick Sutterer) * Status: Open * Assignee: jeremyevans0 (Jeremy Evans) * ruby -v: ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +PRISM [x86_64-linux] * Backport: 3.2: DONTNEED, 3.3: DONTNEED, 3.4: REQUIRED ---------------------------------------- The bug is very simple to provoke. ``` ruby proc = ->(*) { } # we do NOT expect any keyword arguments. args = [1, 2] proc.(*args, bug: true) pp args #=> [1, 2, {bug: true}] ``` The `args` array now has a third element which is exactly what got passed as keyword arguments. This is only in Ruby 3.4, 3.3 and below discard the "unexpected" keyword arguments as expected. -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/