ohler55 / oj

Optimized JSON
http://www.ohler.com/oj
MIT License
3.12k stars 250 forks source link

Segfault when calling Oj.dump without any arguments in mimic_JSON mode #326

Closed fterrazzoni closed 7 years ago

fterrazzoni commented 7 years ago

Env:

How to reproduce :

require 'oj'
Oj.mimic_JSON
Oj.dump

Expected output:

An error message (for instance ArgumentError: wrong number of arguments (given 0, expected 1))

Actual output:

(irb):4: [BUG] Segmentation fault at 0x00000000001879
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]

-- Crash Report log information --------------------------------------------
   See Crash Report log file under the one of following:
     * ~/Library/Logs/CrashReporter
     * /Library/Logs/CrashReporter
     * ~/Library/Logs/DiagnosticReports
     * /Library/Logs/DiagnosticReports
   for more details.
Don't forget to include the above Crash Report log file in bug reports.

-- Control frame information -----------------------------------------------
c:0020 p:---- s:0077 e:000076 CFUNC  :to_s
c:0019 p:---- s:0075 e:000074 CFUNC  :dump
c:0018 p:0012 s:0072 e:000071 EVAL   (irb):4 [FINISH]
c:0017 p:---- s:0070 e:000069 CFUNC  :eval
c:0016 p:0025 s:0063 e:000062 METHOD /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/workspace.rb:87
c:0015 p:0027 s:0056 e:000054 METHOD /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/context.rb:380
c:0014 p:0024 s:0050 e:000049 BLOCK  /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:489
c:0013 p:0041 s:0042 e:000041 METHOD /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:623
c:0012 p:0011 s:0037 e:000036 BLOCK  /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:486
c:0011 p:0128 s:0033 e:000032 BLOCK  /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:246 [FINISH]
c:0010 p:---- s:0030 e:000029 CFUNC  :loop
c:0009 p:0009 s:0027 e:000026 BLOCK  /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:232 [FINISH]
c:0008 p:---- s:0025 e:000024 CFUNC  :catch
c:0007 p:0018 s:0021 e:000020 METHOD /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:231
c:0006 p:0037 s:0018 E:000b70 METHOD /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:485
c:0005 p:0009 s:0015 e:000014 BLOCK  /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:395 [FINISH]
c:0004 p:---- s:0013 e:000012 CFUNC  :catch
c:0003 p:0174 s:0009 E:000840 METHOD /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:394
c:0002 p:0023 s:0004 E:0019a0 EVAL   /Users/Fred/.rbenv/versions/2.3.1/bin/irb:11 [FINISH]
c:0001 p:0000 s:0002 E:0009c0 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
/Users/Fred/.rbenv/versions/2.3.1/bin/irb:11:in `<main>'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:394:in `start'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:394:in `catch'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:395:in `block in start'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:485:in `eval_input'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:231:in `each_top_level_statement'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:231:in `catch'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:232:in `block in each_top_level_statement'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:232:in `loop'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb:246:in `block (2 levels) in each_top_level_statement'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:486:in `block in eval_input'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:623:in `signal_status'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb:489:in `block (2 levels) in eval_input'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/context.rb:380:in `evaluate'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/workspace.rb:87:in `evaluate'
/Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/workspace.rb:87:in `eval'
(irb):4:in `irb_binding'
(irb):4:in `dump'
(irb):4:in `to_s'

-- Machine register context ------------------------------------------------
 rax: 0x0000000000001871 rbx: 0x00007f9e9501b4f0 rcx: 0x000000000000001a
 rdx: 0x0000000109dc7700 rdi: 0x00007f9e9501b4f0 rsi: 0x00007fff55f95c9c
 rbp: 0x00007fff55f95c40 rsp: 0x00007fff55f95c10  r8: 0x00007fff55f95e90
  r9: 0x00007f9e930db000 r10: 0x00000000000000cc r11: 0x00007fff55f95ec8
 r12: 0x0000000000000000 r13: 0x00007f9e92c10190 r14: 0x00007fff55f95c9c
 r15: 0x00007fff55f95c9c rip: 0x0000000109dc74fc rfl: 0x0000000000010206

-- C level backtrace information -------------------------------------------
0   ruby                                0x0000000109e11b24 rb_vm_bugreport + 388
1   ruby                                0x0000000109cac34a rb_bug_context + 490
2   ruby                                0x0000000109d7fd33 sigsegv + 83
3   libsystem_platform.dylib            0x00007fffab3f2bba _sigtramp + 26
4   ruby                                0x0000000109dc74fc classname + 44
5   ???                                 0x0000000000000000 0x0 + 0

-- Other runtime information -----------------------------------------------

* Loaded script: irb

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-darwin15/enc/encdb.bundle
    5 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-darwin15/enc/trans/transdb.bundle
    6 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/unicode_normalize.rb
    7 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-darwin15/rbconfig.rb
    8 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/compatibility.rb
    9 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/defaults.rb
   10 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/deprecate.rb
   11 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/errors.rb
   12 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/version.rb
   13 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/requirement.rb
   14 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/platform.rb
   15 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/basic_specification.rb
   16 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/stub_specification.rb
   17 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/util/list.rb
   18 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-darwin15/stringio.bundle
   19 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/specification.rb
   20 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/exceptions.rb
   21 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_gem.rb
   22 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/monitor.rb
   23 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb
   24 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems.rb
   25 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/path_support.rb
   26 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/dependency.rb
   27 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.2/lib/did_you_mean/version.rb
   28 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.2/lib/did_you_mean/core_ext/name_error.rb
   29 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.2/lib/did_you_mean/levenshtein.rb
   30 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.2/lib/did_you_mean/jaro_winkler.rb
   31 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.2/lib/did_you_mean/spell_checker.rb
   32 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/delegate.rb
   33 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.2/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
   34 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.2/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
   35 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.2/lib/did_you_mean/spell_checkers/name_error_checkers.rb
   36 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.2/lib/did_you_mean/spell_checkers/method_name_checker.rb
   37 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.2/lib/did_you_mean/spell_checkers/null_checker.rb
   38 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.2/lib/did_you_mean/formatter.rb
   39 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.2/lib/did_you_mean.rb
   40 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/e2mmap.rb
   41 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/init.rb
   42 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/workspace.rb
   43 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/inspector.rb
   44 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/context.rb
   45 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/extend-command.rb
   46 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/output-method.rb
   47 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/notifier.rb
   48 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/slex.rb
   49 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-token.rb
   50 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/ruby-lex.rb
   51 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/src_encoding.rb
   52 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/magic-file.rb
   53 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-darwin15/readline.bundle
   54 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/input-method.rb
   55 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb/locale.rb
   56 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/irb.rb
   57 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-darwin15/bigdecimal.bundle
   58 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/oj-2.18.0/lib/oj/version.rb
   59 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/oj-2.18.0/lib/oj/bag.rb
   60 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/oj-2.18.0/lib/oj/easy_hash.rb
   61 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/oj-2.18.0/lib/oj/error.rb
   62 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/ostruct.rb
   63 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/oj-2.18.0/lib/oj/mimic.rb
   64 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/oj-2.18.0/lib/oj/saj.rb
   65 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/oj-2.18.0/lib/oj/schandler.rb
   66 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-darwin15/date_core.bundle
   67 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/date.rb
   68 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/time.rb
   69 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/oj-2.18.0/lib/oj/oj.bundle
   70 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/oj-2.18.0/lib/oj.rb
   71 json
   72 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json.rb
   73 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/add/bigdecimal.rb
   74 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/add/complex.rb
   75 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/add/core.rb
   76 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/add/date.rb
   77 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/add/date_time.rb
   78 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/add/exception.rb
   79 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/add/ostruct.rb
   80 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/add/range.rb
   81 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/add/rational.rb
   82 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/add/regexp.rb
   83 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/add/struct.rb
   84 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/add/symbol.rb
   85 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/add/time.rb
   86 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/common.rb
   87 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/ext.rb
   88 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/generic_object.rb
   89 /Users/Fred/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/version.rb

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

[1]    17693 abort      irb
ohler55 commented 7 years ago

Verified. I'll get that fixed up today. Verified it does not report as expected but did not get the crash.

ohler55 commented 7 years ago

Forgot to ask you to check it against the latest release.

fterrazzoni commented 7 years ago

I confirm the issue is resolved in the latest version.