Bug #4040


SystemStackError with Hash[*a] for Large _a_

Added by runpaint (Run Paint Run Run) about 12 years ago. Updated 2 days ago.

Target version:
ruby -v:
ruby 1.9.3dev (2010-11-09 trunk 29737) [x86_64-linux]


I've been hesitating over whether to file a ticket about this, so please feel free to close if I've made the wrong choice.

I often use Hash[*array.flatten] in IRB to convert arrays of arrays into hashes. Today I noticed that if the array is big enough, this would raise a SystemStackError. Puzzled, I looked deeper. I assumed I was hitting the maximum number of arguments a method's argc can hold, but realised that the minimum size of the array needed to trigger this exception differed depending on whether I used IRB or not. So, presumably this is indeed exhausting the stack...

In IRB, the following is the minimal reproduction of this problem:

Hash[*{ 1 }]; true

I haven't looked for the minimum value needed with ruby -e, but the following reproduces:

ruby -e 'Hash[*{ 1 }]'

I suppose this isn't technically a bug, but maybe it offers another argument for either #666 or an extension of #3131.

Related issues 2 (0 open2 closed)

Related to Ruby master - Bug #982: stack level too deep for long Array initializationClosedko1 (Koichi Sasada)12/29/2008Actions
Related to Ruby master - Bug #5719: Hash::[] can't handle 100000+ argsClosedko1 (Koichi Sasada)Actions
Actions #1

Updated by duerst (Martin Dürst) about 12 years ago

This bug may be related to bug #982.

Updated by naruse (Yui NARUSE) over 11 years ago

  • Status changed from Open to Assigned
  • Assignee set to ko1 (Koichi Sasada)

Updated by nahi (Hiroshi Nakamura) over 11 years ago

  • Target version set to 1.9.3

Updated by ko1 (Koichi Sasada) over 11 years ago

  • Target version changed from 1.9.3 to 2.0.0

Let us pending it to next version....

Updated by ko1 (Koichi Sasada) about 10 years ago

  • Target version changed from 2.0.0 to 2.6

We need re-consideration about method invocation to support such cases.
I want to challenge at next version.

Updated by ko1 (Koichi Sasada) almost 6 years ago

Current implementation: now splatting huge parameters (and receive rest arguments) for Ruby methods are fine. However, C methods doesn't support this pattern. It should be fixed.

Actions #7

Updated by ko1 (Koichi Sasada) almost 6 years ago

  • Related to Bug #5719: Hash::[] can't handle 100000+ args added
Actions #8

Updated by naruse (Yui NARUSE) almost 5 years ago

  • Target version deleted (2.6)

Updated by jeremyevans0 (Jeremy Evans) 2 days ago

I submitted a pull request to fix this:


Also available in: Atom PDF