brianmario/yajl-ruby — Issue #98: Segfault during encoding for "recursive hashes"
Author: igrigorik
Created: 2012-03-03 21:17:58+00:00
State: open

Just ran into this.. should throw an error, instead of segfaulting the runtime.. :-)

```ruby
1.9.3p0 :001 > require 'yajl'
=> true
1.9.3p0 :002 > test = {key: {}}
=> {:key=>{}}
1.9.3p0 :004 > test[:key].merge! test
=> {:key=>{...}}
1.9.3p0 :005 > test[:key]
=> {:key=>{...}}
1.9.3p0 :006 > Yajl::Encoder.encode(test)
```

```
/Users/igrigorik/.rvm/gems/ruby-1.9.3-p0/gems/yajl-ruby-1.1.0/lib/yajl.rb:72: [BUG] Segmentation fault
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin10.8.0]

-- Control frame information -----------------------------------------------
c:0025 p:---- s:0095 b:0095 l:000094 d:000094 CFUNC :encode
c:0024 p:0068 s:0090 b:0090 l:000089 d:000089 METHOD /Users/igrigorik/.rvm/gems/ruby-1.9.3-p0/gems/yajl-ruby-1.1.0/lib/yajl.rb:72
c:0023 p:0020 s:0082 b:0082 l:001ff8 d:000081 EVAL (irb):6
c:0022 p:---- s:0080 b:0080 l:000079 d:000079 FINISH
c:0021 p:---- s:0078 b:0078 l:000077 d:000077 CFUNC :eval
c:0020 p:0028 s:0071 b:0071 l:000070 d:000070 METHOD /Users/igrigorik/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/irb/workspace.rb:80
c:0019 p:0033 s:0064 b:0063 l:000062 d:000062 METHOD /Users/igrigorik/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/irb/context.rb:254
c:0018 p:0031 s:0058 b:0058 l:0007e8 d:000057 BLOCK /Users/igrigorik/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/irb.rb:159
c:0017 p:0042 s:0050 b:0050 l:000049 d:000049 METHOD /Users/igrigorik/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/irb.rb:273
c:0016 p:0011 s:0045 b:0045 l:0007e8 d:000044 BLOCK /Users/igrigorik/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/irb.rb:156
c:0015 p:0144 s:0041 b:0041 l:000024 d:000040 BLOCK /Users/igrigorik/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/irb/ruby-lex.rb:243
c:0014 p:---- s:0038 b:0038 l:000037 d:000037 FINISH
c:0013 p:---- s:0036 b:0036 l:000035 d:000035 CFUNC :loop
c:0012 p:0009 s:0033 b:0033 l:000024 d:000032 BLOCK /Users/igrigorik/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/irb/ruby-lex.rb:229
c:0011 p:---- s:0031 b:0031 l:000030 d:000030 FINISH
c:0010 p:---- s:0029 b:0029 l:000028 d:000028 CFUNC :catch
c:0009 p:0023 s:0025 b:0025 l:000024 d:000024 METHOD /Users/igrigorik/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/irb/ruby-lex.rb:228
c:0008 p:0046 s:0022 b:0022 l:0007e8 d:0007e8 METHOD /Users/igrigorik/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/irb.rb:155
c:0007 p:0011 s:0019 b:0019 l:000c18 d:000018 BLOCK /Users/igrigorik/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/irb.rb:70
c:0006 p:---- s:0017 b:0017 l:000016 d:000016 FINISH
c:0005 p:---- s:0015 b:0015 l:000014 d:000014 CFUNC :catch
c:0004 p:0183 s:0011 b:0011 l:000c18 d:000c18 METHOD /Users/igrigorik/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/irb.rb:69
c:0003 p:0142 s:0006 b:0006 l:002138 d:000758 EVAL /Users/igrigorik/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:002138 d:002138 TOP
```