Joe Ennever created THRIFT-3307:
-----------------------------------

             Summary: Segfault in Ruby serializer
                 Key: THRIFT-3307
                 URL: https://issues.apache.org/jira/browse/THRIFT-3307
             Project: Thrift
          Issue Type: Bug
          Components: Ruby - Library
    Affects Versions: 0.9.2
         Environment: OS X 10.10.4
            Reporter: Joe Ennever


When attempting to serialize a malformed union, the serializer segfaults.

This simple case reproduces the issue:

{code:none|title=test.thrift}
struct Child {
}

union Parent {
  1: optional Child child
}
{code}

The code is generated with {{thrift --gen rb test.thrift}}. 

Running the following script produces the segfault:

{code:none|title=test.rb}
require './gen-rb/test_types.rb'

Thrift::Serializer.new.serialize(Parent.new({ foo: :bar }))
{code}

I'm using Ruby version {{2.1.5p273 (2014-11-13 revision 48405)}}, and Thrift 
version 0.9.2

Ruby prints the following when running the script:

{code}
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/serializer/serializer.rb:29:
 [BUG] Segmentation fault at 0x00000000000018
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0]

-- 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.

-- Control frame information -----------------------------------------------
c:0004 p:---- s:0012 e:000011 CFUNC  :write
c:0003 p:0019 s:0008 e:000007 METHOD 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/serializer/serializer.rb:29
c:0002 p:0038 s:0004 E:0003f8 EVAL   test.rb:3 [FINISH]
c:0001 p:0000 s:0002 E:001ff8 TOP    [FINISH]

test.rb:3:in `<main>'
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/serializer/serializer.rb:29:in
 `serialize'
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/serializer/serializer.rb:29:in
 `write'

-- C level backtrace information -------------------------------------------
0   ruby                                0x0000000109a6ce50 rb_vm_bugreport + 144
1   ruby                                0x000000010991e9b1 report_bug + 305
2   ruby                                0x000000010991e874 rb_bug + 180
3   ruby                                0x00000001099ef1bc sigsegv + 156
4   libsystem_platform.dylib            0x00007fff98f75f1a _sigtramp + 26
5   ruby                                0x0000000109947191 rb_hash_aref + 17
6   ???                                 0x0000000000000008 0x0 + 8

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

* Loaded script: test.rb

* Loaded features:

    0 enumerator.so
    1 enc/encdb.so
    2 enc/trans/transdb.so
    3 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/x86_64-darwin14.0/rbconfig.rb
    4 thread.rb
    5 thread.so
    6 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/compatibility.rb
    7 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/defaults.rb
    8 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/deprecate.rb
    9 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/errors.rb
   10 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/version.rb
   11 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/requirement.rb
   12 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/platform.rb
   13 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/basic_specification.rb
   14 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/stub_specification.rb
   15 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/util/stringio.rb
   16 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/specification.rb
   17 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/exceptions.rb
   18 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_gem.rb
   19 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/monitor.rb
   20 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb
   21 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems.rb
   22 pathname.so
   23 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/pathname.rb
   24 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/constants.rb
   25 io/console.so
   26 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/user_interaction.rb
   27 etc.so
   28 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/config_file.rb
   29 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/rubygems_integration.rb
   30 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/current_ruby.rb
   31 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/dependency.rb
   32 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/shared_helpers.rb
   33 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb
   34 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/gem_path_manipulation.rb
   35 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/gem_helpers.rb
   36 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/match_platform.rb
   37 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/rubygems_ext.rb
   38 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/version.rb
   39 /Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler.rb
   40 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/settings.rb
   41 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/path_support.rb
   42 digest.so
   43 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/digest.rb
   44 digest/sha1.so
   45 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/set.rb
   46 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/definition.rb
   47 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/dependency.rb
   48 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/ruby_dsl.rb
   49 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/dsl.rb
   50 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/source_list.rb
   51 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/source.rb
   52 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/uri/common.rb
   53 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/uri/generic.rb
   54 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/uri/ftp.rb
   55 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/uri/http.rb
   56 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/uri/https.rb
   57 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/uri/ldap.rb
   58 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/uri/ldaps.rb
   59 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/uri/mailto.rb
   60 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/uri.rb
   61 socket.so
   62 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/socket.rb
   63 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/timeout.rb
   64 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/protocol.rb
   65 zlib.so
   66 stringio.so
   67 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http/exceptions.rb
   68 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http/header.rb
   69 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http/generic_request.rb
   70 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http/request.rb
   71 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http/requests.rb
   72 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http/response.rb
   73 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http/responses.rb
   74 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http/proxy_delta.rb
   75 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http/backward.rb
   76 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http.rb
   77 date_core.so
   78 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/date/format.rb
   79 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/date.rb
   80 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/time.rb
   81 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/request/http_pool.rb
   82 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/request/https_pool.rb
   83 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/request/connection_pools.rb
   84 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/request.rb
   85 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/cgi/core.rb
   86 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/cgi/util.rb
   87 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/cgi/cookie.rb
   88 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/cgi.rb
   89 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/uri_formatter.rb
   90 fcntl.so
   91 openssl.so
   92 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/openssl/bn.rb
   93 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/openssl/cipher.rb
   94 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/openssl/config.rb
   95 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/openssl/digest.rb
   96 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/openssl/x509.rb
   97 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/openssl/buffering.rb
   98 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/openssl/ssl.rb
   99 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/openssl.rb
  100 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/securerandom.rb
  101 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/resolv.rb
  102 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/remote_fetcher.rb
  103 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/text.rb
  104 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/name_tuple.rb
  105 
/Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/spec_fetcher.rb
  106 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/source/rubygems.rb
  107 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/ruby_version.rb
  108 strscan.so
  109 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/source/path.rb
  110 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/source/git.rb
  111 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/lockfile_parser.rb
  112 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/lazy_specification.rb
  113 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/tsort.rb
  114 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/forwardable.rb
  115 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/spec_set.rb
  116 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/environment.rb
  117 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/runtime.rb
  118 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/index.rb
  119 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/remote_specification.rb
  120 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/endpoint_specification.rb
  121 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/dep_proxy.rb
  122 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/bundler-1.7.6/lib/bundler/setup.rb
  123 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/bytes.rb
  124 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/core_ext/fixnum.rb
  125 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/core_ext.rb
  126 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/exceptions.rb
  127 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/types.rb
  128 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/processor.rb
  129 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/client.rb
  130 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/struct.rb
  131 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/union.rb
  132 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/struct_union.rb
  133 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/serializer/serializer.rb
  134 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/serializer/deserializer.rb
  135 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/protocol/base_protocol.rb
  136 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/protocol/binary_protocol.rb
  137 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/protocol/binary_protocol_accelerated.rb
  138 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/protocol/compact_protocol.rb
  139 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/protocol/json_protocol.rb
  140 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/transport/base_transport.rb
  141 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/transport/base_server_transport.rb
  142 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/transport/socket.rb
  143 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/transport/server_socket.rb
  144 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/transport/unix_socket.rb
  145 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/transport/unix_server_socket.rb
  146 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/transport/buffered_transport.rb
  147 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/transport/framed_transport.rb
  148 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/https.rb
  149 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/transport/http_client_transport.rb
  150 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/transport/io_stream_transport.rb
  151 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/transport/memory_buffer_transport.rb
  152 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/server/base_server.rb
  153 /Users/joe/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/logger.rb
  154 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/server/nonblocking_server.rb
  155 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/server/simple_server.rb
  156 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/server/threaded_server.rb
  157 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/server/thread_pool_server.rb
  158 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift_native.bundle
  159 
/Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift/thrift_native.rb
  160 /Users/joe/.rvm/gems/ruby-2.1.5@global/gems/thrift-0.9.2.0/lib/thrift.rb
  161 /private/tmp/segfault/gen-rb/test_types.rb

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
Don't forget to include the above Crash Report log file.
For details: http://www.ruby-lang.org/bugreport.html

Abort trap: 6
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to