Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Segfault if Vips constants are accessed before Vips::Image #98

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
felixbuenemann opened this issue Feb 14, 2017 · 8 comments
Closed

Segfault if Vips constants are accessed before Vips::Image #98

felixbuenemann opened this issue Feb 14, 2017 · 8 comments
Labels

Comments

@felixbuenemann
Copy link
Contributor

felixbuenemann commented Feb 14, 2017

In one of my projects I have a unit test, which always crashes in Vips::Image.new_from_file as long as a Vips::Access constant is access before Vips::Image, so it is likely related to load order / initialization of gobject introspection.

I have the following test case, which always crashes until I move the Vips::Access location after Vips::Image in the source code or use a symbol instead of the constant (eg. :sequential_unbuffered instead of Vips::Access::SEQUENTIAL_UNBUFFERED.

The crash seems to be related to the following error:

GLib-CRITICAL **: g_hash_table_lookup: assertion 'hash_table != NULL' failed

I tested with both ruby-2.3.3 and ruby-2.4.0 on macOS 10.12.3 x64 / Homebrew / RVM 1.28.0.

The test case requires bundler, so you need to do gem install bundler followed by ruby testcase.rb.

require "bundler/inline"

gemfile(install = true) do
  source "https://rubygems.org"
  gem "ruby-vips", "1.0.4"
  gem "glib2", "3.1.1"
  gem "gobject-introspection", "3.1.1"
  gem "minitest", "5.10.0"
end

require "minitest/autorun"
require "tempfile"
require "vips"

# Important for Crash:
# Access Vips constant before initializing vips
# via Vips::Image.new_from_file.
VIPS_ACCESS = Vips::Access::SEQUENTIAL_UNBUFFERED

class TestVipsCrash < MiniTest::Test
  def test_segfault
    tmp = Tempfile.new ['', '.pbm']
    tmp.write "P1\n1 1\n0" # 1x1 Black PBM
    tmp.flush
    Vips::Image.new_from_file tmp.path, access: VIPS_ACCESS
  end
end

The test case uses a PBM file, but any image format should do.

The following code would not crash:

# Vips::Access constant located after Vips::Image works
Vips::Image.new_from_file tmp.path, access: Vips::Access::SEQUENTIAL_UNBUFFERED
# or use symbol instead:
Vips::Image.new_from_file tmp.path, access: :sequential_unbuffered

Here's the crash data on ruby-2.4.0:

GLib-CRITICAL **: g_hash_table_lookup: assertion 'hash_table != NULL' failed
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/loader.rb:110:in `block in define_singleton_method'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:173:in `build'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:249:in `invoke'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:278:in `call_base'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/image.rb:452:in `new_from_file'
	from /Users/felix/tmp/vips_crash_testcase.rb:25:in `test_segfault'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:105:in `block (3 levels) in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:202:in `capture_exceptions'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:102:in `block (2 levels) in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:253:in `time_it'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:101:in `block in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:349:in `on_signal'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:273:in `with_info_handler'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:100:in `run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:821:in `run_one_method'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:323:in `run_one_method'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:310:in `block (2 levels) in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:309:in `each'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:309:in `block in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:349:in `on_signal'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:336:in `with_info_handler'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:308:in `run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `block in __run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `map'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `__run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:135:in `run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:62:in `block in autorun'
GLib-CRITICAL **: g_hash_table_lookup: assertion 'hash_table != NULL' failed
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/loader.rb:110:in `block in define_singleton_method'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:189:in `build'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:249:in `invoke'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:278:in `call_base'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/image.rb:452:in `new_from_file'
	from /Users/felix/tmp/vips_crash_testcase.rb:25:in `test_segfault'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:105:in `block (3 levels) in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:202:in `capture_exceptions'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:102:in `block (2 levels) in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:253:in `time_it'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:101:in `block in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:349:in `on_signal'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:273:in `with_info_handler'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:100:in `run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:821:in `run_one_method'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:323:in `run_one_method'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:310:in `block (2 levels) in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:309:in `each'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:309:in `block in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:349:in `on_signal'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:336:in `with_info_handler'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:308:in `run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `block in __run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `map'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `__run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:135:in `run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:62:in `block in autorun'
GLib-CRITICAL **: g_hash_table_insert_internal: assertion 'hash_table != NULL' failed
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/loader.rb:110:in `block in define_singleton_method'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:189:in `build'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:249:in `invoke'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:278:in `call_base'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/image.rb:452:in `new_from_file'
	from /Users/felix/tmp/vips_crash_testcase.rb:25:in `test_segfault'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:105:in `block (3 levels) in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:202:in `capture_exceptions'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:102:in `block (2 levels) in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:253:in `time_it'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:101:in `block in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:349:in `on_signal'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:273:in `with_info_handler'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:100:in `run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:821:in `run_one_method'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:323:in `run_one_method'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:310:in `block (2 levels) in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:309:in `each'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:309:in `block in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:349:in `on_signal'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:336:in `with_info_handler'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:308:in `run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `block in __run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `map'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `__run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:135:in `run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:62:in `block in autorun'
GLib-CRITICAL **: g_hash_table_lookup: assertion 'hash_table != NULL' failed
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/loader.rb:110:in `block in define_singleton_method'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:189:in `build'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:249:in `invoke'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:278:in `call_base'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/image.rb:452:in `new_from_file'
	from /Users/felix/tmp/vips_crash_testcase.rb:25:in `test_segfault'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:105:in `block (3 levels) in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:202:in `capture_exceptions'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:102:in `block (2 levels) in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:253:in `time_it'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:101:in `block in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:349:in `on_signal'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:273:in `with_info_handler'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:100:in `run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:821:in `run_one_method'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:323:in `run_one_method'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:310:in `block (2 levels) in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:309:in `each'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:309:in `block in run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:349:in `on_signal'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:336:in `with_info_handler'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:308:in `run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `block in __run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `map'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `__run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:135:in `run'
	from /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:62:in `block in autorun'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/loader.rb:110: [BUG] Segmentation fault at 0x00000000000008
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]

-- 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:0029 p:---- s:0170 e:000169 CFUNC  :invoke
c:0028 p:0071 s:0165 e:000164 LAMBDA /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/loader.rb:110 [FINISH]
c:0027 p:0129 s:0160 e:000159 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:189
c:0026 p:0068 s:0154 e:000153 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:249
c:0025 p:0063 s:0144 e:000143 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:278
c:0024 p:0131 s:0133 e:000132 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/image.rb:452
c:0023 p:0066 s:0124 e:000123 METHOD /Users/felix/tmp/vips_crash_testcase.rb:25
c:0022 p:0029 s:0119 e:000118 BLOCK  /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:105
c:0021 p:0006 s:0116 e:000115 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:202
c:0020 p:0009 s:0111 e:000110 BLOCK  /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:102
c:0019 p:0020 s:0108 e:000107 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:253
c:0018 p:0009 s:0103 e:000102 BLOCK  /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:101
c:0017 p:0037 s:0100 E:001110 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:349
c:0016 p:0052 s:0092 E:001098 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:273
c:0015 p:0009 s:0085 E:0009a0 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:100
c:0014 p:0014 s:0081 e:000080 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:821
c:0013 p:0032 s:0074 e:000072 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:323
c:0012 p:0014 s:0066 e:000065 BLOCK  /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:310 [FINISH]
c:0011 p:---- s:0062 e:000061 CFUNC  :each
c:0010 p:0010 s:0058 e:000057 BLOCK  /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:309
c:0009 p:0037 s:0055 E:000f20 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:349
c:0008 p:0035 s:0047 E:000ea8 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:336
c:0007 p:0131 s:0040 E:000d68 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:308
c:0006 p:0013 s:0031 e:000030 BLOCK  /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158 [FINISH]
c:0005 p:---- s:0027 e:000026 CFUNC  :map
c:0004 p:0046 s:0023 e:000022 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158
c:0003 p:0158 s:0014 e:000013 METHOD /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:135
c:0002 p:0071 s:0007 E:000a28 BLOCK  /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:62 [FINISH]
c:0001 p:0000 s:0003 E:002680 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:62:in `block in autorun'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:135:in `run'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `__run'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `map'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:158:in `block in __run'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:308:in `run'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:336:in `with_info_handler'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:349:in `on_signal'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:309:in `block in run'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:309:in `each'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:310:in `block (2 levels) in run'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:323:in `run_one_method'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:821:in `run_one_method'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:100:in `run'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:273:in `with_info_handler'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb:349:in `on_signal'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:101:in `block in run'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:253:in `time_it'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:102:in `block (2 levels) in run'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:202:in `capture_exceptions'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb:105:in `block (3 levels) in run'
/Users/felix/tmp/vips_crash_testcase.rb:25:in `test_segfault'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/image.rb:452:in `new_from_file'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:278:in `call_base'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:249:in `invoke'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb:189:in `build'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/loader.rb:110:in `block in define_singleton_method'
/Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/loader.rb:110:in `invoke'

-- Machine register context ------------------------------------------------
 rax: 0x0000000000000000 rbx: 0x00007fc96fb290f0 rcx: 0x0000000000000001
 rdx: 0x00000000003b11e0 rdi: 0x00000000000f38d0 rsi: 0x00007fc971700000
 rbp: 0x00007fff5dce3ce0 rsp: 0x00007fff5dce3cd0  r8: 0x0000000000000007
  r9: 0x00007fc971be2f40 r10: 0x0000000000000001 r11: 0x0000000000000008
 r12: 0x0000000000000001 r13: 0x00007fff5dce3d10 r14: 0x00007fc971cac260
 r15: 0x0000000000000000 rip: 0x0000000106acb4bb rfl: 0x0000000000010202

-- C level backtrace information -------------------------------------------
0   libruby.2.4.0.dylib                 0x00000001020efe84 rb_vm_bugreport + 388
1   libruby.2.4.0.dylib                 0x0000000101f897ea rb_bug_context + 490
2   libruby.2.4.0.dylib                 0x000000010206bc48 sigsegv + 72
3   libsystem_platform.dylib            0x00007fffac7dabba _sigtramp + 26
4   libvips.42.dylib                    0x0000000106acb4bb vips_cache_ref + 79
5   libvips.42.dylib                    0x0000000106acb583 vips_cache_operation_add + 190
6   libffi.6.dylib                      0x0000000106786934 ffi_call_unix64 + 76
7   libffi.6.dylib                      0x000000010678627a ffi_call + 882
8   libgirepository-1.0.1.dylib         0x00000001067fd78d g_callable_info_invoke + 945
9   libgirepository-1.0.1.dylib         0x00000001067fe970 g_function_info_invoke + 242
10  gobject_introspection.bundle        0x00000001067dcd28 rb_gi_function_info_invoke_raw + 1368
11  gobject_introspection.bundle        0x00000001067dd545 rg_invoke + 53
12  libruby.2.4.0.dylib                 0x00000001020e330e vm_call_cfunc + 302
13  libruby.2.4.0.dylib                 0x00000001020ccee1 vm_exec_core + 10017
14  libruby.2.4.0.dylib                 0x00000001020dde74 vm_exec + 116
15  libruby.2.4.0.dylib                 0x00000001020eb9df invoke_iseq_block_from_c + 1135
16  libruby.2.4.0.dylib                 0x00000001020e3a7b vm_call_bmethod + 299
17  libruby.2.4.0.dylib                 0x00000001020cd63c vm_exec_core + 11900
18  libruby.2.4.0.dylib                 0x00000001020dde74 vm_exec + 116
19  libruby.2.4.0.dylib                 0x00000001020eb32a invoke_block_from_c_splattable + 362
20  libruby.2.4.0.dylib                 0x00000001020d8f5a rb_yield + 138
21  libruby.2.4.0.dylib                 0x0000000101f25d99 rb_ary_each + 41
22  libruby.2.4.0.dylib                 0x00000001020e330e vm_call_cfunc + 302
23  libruby.2.4.0.dylib                 0x00000001020ccee1 vm_exec_core + 10017
24  libruby.2.4.0.dylib                 0x00000001020dde74 vm_exec + 116
25  libruby.2.4.0.dylib                 0x00000001020eb32a invoke_block_from_c_splattable + 362
26  libruby.2.4.0.dylib                 0x00000001020d8f5a rb_yield + 138
27  libruby.2.4.0.dylib                 0x0000000101f2b6fa rb_ary_collect + 442
28  libruby.2.4.0.dylib                 0x00000001020e330e vm_call_cfunc + 302
29  libruby.2.4.0.dylib                 0x00000001020ccee1 vm_exec_core + 10017
30  libruby.2.4.0.dylib                 0x00000001020dde74 vm_exec + 116
31  libruby.2.4.0.dylib                 0x00000001020dc665 vm_invoke_proc + 293
32  libruby.2.4.0.dylib                 0x0000000102018181 rb_proc_call + 81
33  libruby.2.4.0.dylib                 0x0000000101f91ac7 rb_exec_end_proc + 359
34  libruby.2.4.0.dylib                 0x0000000101f91ffe ruby_finalize_0 + 110
35  libruby.2.4.0.dylib                 0x0000000101f92125 ruby_cleanup + 277
36  libruby.2.4.0.dylib                 0x0000000101f923cd ruby_run_node + 61
37  ruby                                0x0000000101f19f2f main + 79

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

* Loaded script: /Users/felix/tmp/vips_crash_testcase.rb

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/enc/encdb.bundle
    5 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/enc/trans/transdb.bundle
    6 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/unicode_normalize.rb
    7 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/rbconfig.rb
    8 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/compatibility.rb
    9 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/defaults.rb
   10 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/deprecate.rb
   11 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/errors.rb
   12 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/version.rb
   13 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/requirement.rb
   14 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/platform.rb
   15 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/basic_specification.rb
   16 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/stub_specification.rb
   17 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/util/list.rb
   18 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/stringio.bundle
   19 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/specification.rb
   20 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/exceptions.rb
   21 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/dependency.rb
   22 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_gem.rb
   23 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/monitor.rb
   24 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb
   25 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems.rb
   26 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/path_support.rb
   27 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/did_you_mean-1.1.0/lib/did_you_mean/version.rb
   28 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/did_you_mean-1.1.0/lib/did_you_mean/core_ext/name_error.rb
   29 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/did_you_mean-1.1.0/lib/did_you_mean/levenshtein.rb
   30 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/did_you_mean-1.1.0/lib/did_you_mean/jaro_winkler.rb
   31 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checker.rb
   32 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/delegate.rb
   33 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
   34 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
   35 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb
   36 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/method_name_checker.rb
   37 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/null_checker.rb
   38 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/did_you_mean-1.1.0/lib/did_you_mean/formatter.rb
   39 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/did_you_mean-1.1.0/lib/did_you_mean.rb
   40 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/inline.rb
   41 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/etc.bundle
   42 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/fileutils.rb
   43 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/pathname.bundle
   44 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/pathname.rb
   45 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/tmpdir.rb
   46 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/errors.rb
   47 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/environment_preserver.rb
   48 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/plugin/api.rb
   49 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/plugin.rb
   50 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/rfc2396_parser.rb
   51 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/rfc3986_parser.rb
   52 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/common.rb
   53 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/generic.rb
   54 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/ftp.rb
   55 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/http.rb
   56 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/https.rb
   57 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/ldap.rb
   58 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/ldaps.rb
   59 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/mailto.rb
   60 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/uri.rb
   61 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/digest.bundle
   62 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/digest.rb
   63 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/util.rb
   64 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/source/git.rb
   65 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/source/installed.rb
   66 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/source/specific_file.rb
   67 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/source/local.rb
   68 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/source/lock.rb
   69 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/source/vendor.rb
   70 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/source.rb
   71 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/gem_helpers.rb
   72 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/match_platform.rb
   73 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/rubygems_ext.rb
   74 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/io/console.bundle
   75 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/user_interaction.rb
   76 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/config_file.rb
   77 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/rubygems_integration.rb
   78 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/version.rb
   79 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/constants.rb
   80 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/current_ruby.rb
   81 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler.rb
   82 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/ui.rb
   83 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/set.rb
   84 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/command.rb
   85 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb
   86 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb
   87 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/error.rb
   88 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/invocation.rb
   89 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/parser/argument.rb
   90 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb
   91 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/parser/option.rb
   92 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/parser/options.rb
   93 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/parser.rb
   94 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/shell.rb
   95 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb
   96 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/readline.bundle
   97 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb
   98 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/line_editor.rb
   99 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/util.rb
  100 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/base.rb
  101 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor.rb
  102 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb
  103 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb
  104 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb
  105 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb
  106 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/actions/directory.rb
  107 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/cgi/escape.bundle
  108 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/cgi/util.rb
  109 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/strscan.bundle
  110 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/erb.rb
  111 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/date_core.bundle
  112 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/date.rb
  113 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/time.rb
  114 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/open-uri.rb
  115 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb
  116 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb
  117 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/actions.rb
  118 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendored_thor.rb
  119 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/ui/shell.rb
  120 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/tempfile.rb
  121 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/shell/basic.rb
  122 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/thor/lib/thor/shell/color.rb
  123 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/settings.rb
  124 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/feature_flag.rb
  125 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/shared_helpers.rb
  126 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/ext/build_error.rb
  127 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/ext/builder.rb
  128 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/ext/configure_builder.rb
  129 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/ext/ext_conf_builder.rb
  130 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/ext/rake_builder.rb
  131 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/optparse.rb
  132 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/command.rb
  133 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/ext/cmake_builder.rb
  134 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/ext.rb
  135 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/yaml_serializer.rb
  136 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/dependency.rb
  137 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/ruby_dsl.rb
  138 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/dsl.rb
  139 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/plugin/dsl.rb
  140 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/source_list.rb
  141 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/source.rb
  142 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/socket.bundle
  143 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/io/wait.bundle
  144 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/socket.rb
  145 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/timeout.rb
  146 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/protocol.rb
  147 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/zlib.bundle
  148 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/exceptions.rb
  149 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/header.rb
  150 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/enc/windows_31j.bundle
  151 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/generic_request.rb
  152 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/request.rb
  153 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/requests.rb
  154 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/response.rb
  155 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/responses.rb
  156 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/proxy_delta.rb
  157 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/backward.rb
  158 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb
  159 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/request/http_pool.rb
  160 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/request/https_pool.rb
  161 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/request/connection_pools.rb
  162 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/request.rb
  163 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/cgi/core.rb
  164 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/cgi/cookie.rb
  165 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/cgi.rb
  166 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/uri_formatter.rb
  167 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle
  168 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/bn.rb
  169 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/pkey.rb
  170 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/cipher.rb
  171 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/config.rb
  172 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/digest.rb
  173 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/x509.rb
  174 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/buffering.rb
  175 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/io/nonblock.bundle
  176 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/ssl.rb
  177 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl.rb
  178 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/securerandom.rb
  179 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/resolv.rb
  180 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/remote_fetcher.rb
  181 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/text.rb
  182 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/name_tuple.rb
  183 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/spec_fetcher.rb
  184 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/source/rubygems.rb
  185 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/plugin/source_list.rb
  186 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/plugin/installer.rb
  187 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/plugin/installer/rubygems.rb
  188 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/digest/sha1.bundle
  189 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/source/path.rb
  190 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/source/git.rb
  191 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/lockfile_parser.rb
  192 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/definition.rb
  193 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb
  194 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/forwardable/impl.rb
  195 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/forwardable.rb
  196 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/spec_set.rb
  197 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/index.rb
  198 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/gem_version_promoter.rb
  199 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/source/gemspec.rb
  200 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/ui/rg_proxy.rb
  201 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/dependency_list.rb
  202 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/security/policy.rb
  203 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/security/policies.rb
  204 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/security/trust_dir.rb
  205 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/security/signer.rb
  206 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/security.rb
  207 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/package/digest_io.rb
  208 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/package/source.rb
  209 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/package/file_source.rb
  210 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/package/io_source.rb
  211 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/package/old.rb
  212 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/package/tar_header.rb
  213 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/package/tar_reader/entry.rb
  214 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/package/tar_reader.rb
  215 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/package/tar_writer.rb
  216 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/package.rb
  217 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/installer.rb
  218 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/available_set.rb
  219 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/dependency_installer.rb
  220 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/worker.rb
  221 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/installer/gem_installer.rb
  222 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/installer/parallel_installer.rb
  223 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/installer/standalone.rb
  224 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/installer.rb
  225 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/plugin/index.rb
  226 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb
  227 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb
  228 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb
  229 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb
  230 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb
  231 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb
  232 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb
  233 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb
  234 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb
  235 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb
  236 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb
  237 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb
  238 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/state.rb
  239 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb
  240 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb
  241 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb
  242 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb
  243 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb
  244 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb
  245 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/molinillo/lib/molinillo.rb
  246 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendored_molinillo.rb
  247 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/resolver.rb
  248 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/ruby_version.rb
  249 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/dep_proxy.rb
  250 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/source/rubygems/remote.rb
  251 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/mirror.rb
  252 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb
  253 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb
  254 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb
  255 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/vendored_persistent.rb
  256 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/fetcher/base.rb
  257 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/fetcher/compact_index.rb
  258 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/fetcher/dependency.rb
  259 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/fetcher/index.rb
  260 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/fetcher.rb
  261 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/versions.rb
  262 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/exception.rb
  263 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/syntax_error.rb
  264 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/psych.bundle
  265 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/omap.rb
  266 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/set.rb
  267 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/class_loader.rb
  268 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/scalar_scanner.rb
  269 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/node.rb
  270 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/stream.rb
  271 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/document.rb
  272 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/sequence.rb
  273 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/scalar.rb
  274 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/mapping.rb
  275 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/alias.rb
  276 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes.rb
  277 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/streaming.rb
  278 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors/visitor.rb
  279 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors/to_ruby.rb
  280 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors/emitter.rb
  281 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/handler.rb
  282 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/tree_builder.rb
  283 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors/yaml_tree.rb
  284 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/json/ruby_events.rb
  285 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors/json_tree.rb
  286 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors/depth_first.rb
  287 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors.rb
  288 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/parser.rb
  289 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/coder.rb
  290 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/core_ext.rb
  291 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/deprecated.rb
  292 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/stream.rb
  293 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/json/yaml_events.rb
  294 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/json/tree_builder.rb
  295 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/json/stream.rb
  296 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/handlers/document_stream.rb
  297 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/psych.rb
  298 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/yaml.rb
  299 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/psyched_yaml.rb
  300 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/psych_additions.rb
  301 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/psych_tree.rb
  302 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/syck_hack.rb
  303 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/enc/utf_16le.bundle
  304 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/enc/utf_16be.bundle
  305 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/fetcher/downloader.rb
  306 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/digest/md5.bundle
  307 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/compact_index_client/cache.rb
  308 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/compact_index_client/updater.rb
  309 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/compact_index_client.rb
  310 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/retry.rb
  311 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/source_list.rb
  312 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/endpoint_specification.rb
  313 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/remote_specification.rb
  314 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/lazy_specification.rb
  315 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/stub_specification.rb
  316 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/plugin/api/source.rb
  317 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/executable-hooks-1.3.2/lib/executable-hooks/specification.rb
  318 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/executable-hooks-1.3.2/lib/executable-hooks/wrapper.rb
  319 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/command_manager.rb
  320 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/executable-hooks-1.3.2/lib/executable-hooks/regenerate_binstubs_command.rb
  321 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/gem-wrappers-1.2.7/lib/gem-wrappers/specification.rb
  322 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/gem-wrappers-1.2.7/lib/gem-wrappers/environment.rb
  323 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/gem-wrappers-1.2.7/lib/gem-wrappers/installer.rb
  324 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/gem-wrappers-1.2.7/lib/gem-wrappers.rb
  325 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/gem-wrappers-1.2.7/lib/gem-wrappers/command/file_exist.rb
  326 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/gem-wrappers-1.2.7/lib/gem-wrappers/command.rb
  327 /Users/felix/.rvm/gems/ruby-2.4.0@global/gems/bundler-1.14.3/lib/bundler/runtime.rb
  328 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/English.rb
  329 /Users/felix/.rvm/gems/ruby-2.4.0/gems/glib2-3.1.1/lib/glib2/deprecatable.rb
  330 /Users/felix/.rvm/gems/ruby-2.4.0/gems/glib2-3.1.1/lib/glib2.bundle
  331 /Users/felix/.rvm/gems/ruby-2.4.0/gems/glib2-3.1.1/lib/glib2/version.rb
  332 /Users/felix/.rvm/gems/ruby-2.4.0/gems/glib2-3.1.1/lib/glib2/regex.rb
  333 /Users/felix/.rvm/gems/ruby-2.4.0/gems/glib2-3.1.1/lib/glib2.rb
  334 /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject_introspection.bundle
  335 /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/repository.rb
  336 /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/arg-info.rb
  337 /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/collection-reader.rb
  338 /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/callable-info.rb
  339 /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/object-info.rb
  340 /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/interface-info.rb
  341 /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/struct-info.rb
  342 /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/boxed-info.rb
  343 /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/union-info.rb
  344 /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/version.rb
  345 /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection/loader.rb
  346 /Users/felix/.rvm/gems/ruby-2.4.0/gems/gobject-introspection-3.1.1/lib/gobject-introspection.rb
  347 /Users/felix/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/mutex_m.rb
  348 /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/parallel.rb
  349 /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/assertions.rb
  350 /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/unit.rb
  351 /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/test.rb
  352 /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest.rb
  353 /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/expectations.rb
  354 /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/spec.rb
  355 /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/mock.rb
  356 /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/autorun.rb
  357 /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips.rb
  358 /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/error.rb
  359 /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/argument.rb
  360 /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/operation.rb
  361 /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/call.rb
  362 /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/image.rb
  363 /Users/felix/.rvm/gems/ruby-2.4.0/gems/ruby-vips-1.0.4/lib/vips/version.rb
  364 /Users/felix/.rvm/gems/ruby-2.4.0/gems/minitest-5.10.0/lib/minitest/pride_plugin.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
@jcupitt
Copy link
Member

jcupitt commented Feb 24, 2017

Hi Felix, sorry for the delay in getting to this, I've been clearing decks after my holiday.

I tried adding this to your test program:

require "vips"

Vips::set_debug TRUE

# Important for Crash:

Then I ran under gdb like this:

$ gdb ruby
(gdb) break vips__cache_init
(gdb) run crash.rb
....
Using gobject-introspection 3.1.1
Using ruby-vips 1.0.4
[Thread 0x7ffff0eac700 (LWP 3116) exited]
Vips::const_missing: Access
Vips::init: []
Vips::Loader.initialize: Vips, []
Vips::Loader.pre_load: #<GObjectIntrospection::Repository:0x005555573f0e38>, Vips
Vips::Loader.call_init_function: #<GObjectIntrospection::Repository:0x005555573f0e38>, Vips

Thread 1 "ruby" hit Breakpoint 2, vips__cache_init () at cache.c:451
451		if( !vips_cache_table ) {

So your line:

VIPS_ACCESS = Vips::Access::SEQUENTIAL_UNBUFFERED

seems to trigger const_missing, which in turn inits vips, see:

https://github.com/jcupitt/ruby-vips/blob/master/lib/vips.rb#L44

I can step a few lines and see the hash table being built:

(gdb) n
452			vips_cache_lock = vips_g_mutex_new();
(gdb) 
454			vips_cache_table = g_hash_table_new( 
(gdb) 
458	}
(gdb) p vips_cache_table
$5 = (GHashTable *) 0x55555b8be460

If I now continue, I see a crash:

(gdb) c
...
setting optional input args ...
setting access to #<Vips::Access:0x00555557402f20>
building ...
GLib-CRITICAL **: g_hash_table_lookup: assertion 'hash_table != NULL' failed
...
Thread 1 "ruby" received signal SIGSEGV, Segmentation fault.
0x00007fffe9dd18a3 in vips_operation_touch (operation=0x55555b1b2820)
    at cache.c:584
584		entry->time = vips_cache_time;
(gdb) p vips_cache_table
$7 = (GHashTable *) 0x0

So the hash table is vanishing some time between vips init and its use. vips has no code that NULLs out this table, so it must be some bit of Ruby machinery that's doing it.

Could this be caused by the way the unit tester works? Perhaps it is doing the init in the main process, but forking off a process to run the test after the require "vips" but before the access to the constant?

If I change your program to be:

require "tempfile"
require "vips"

Vips::set_debug TRUE

# Important for Crash:
# Access Vips constant before initializing vips
# via Vips::Image.new_from_file.
VIPS_ACCESS = Vips::Access::SEQUENTIAL_UNBUFFERED

tmp = Tempfile.new ['', '.pbm']
tmp.write "P1\n1 1\n0" # 1x1 Black PBM
tmp.flush
Vips::Image.new_from_file tmp.path, access: VIPS_ACCESS

It seems to work OK.

@jcupitt
Copy link
Member

jcupitt commented Feb 24, 2017

If I change your program to be:

class TestVipsCrash < MiniTest::Test
  def test_segfault
    # Important for Crash:
    # Access Vips constant before initializing vips
    # via Vips::Image.new_from_file.
    vips_access = Vips::Access::SEQUENTIAL_UNBUFFERED

    tmp = Tempfile.new ['', '.pbm']
    tmp.write "P1\n1 1\n0" # 1x1 Black PBM
    tmp.flush
    Vips::Image.new_from_file tmp.path, access: vips_access
  end
end

it works too. So I think I blame minitest :(

I like the bundler inline mode, I didn't know it could do that!

@felixbuenemann
Copy link
Contributor Author

I think minitest can run tests in parallel, could this be a thread safety issue similar to the shutdown crashs on python?

@felixbuenemann
Copy link
Contributor Author

felixbuenemann commented Feb 27, 2017

I have added some debug code to print the current PID (Process.pid) and Thread (Thread.current.object_id) and it shows the code is not forking and is running on the same thread.

Also disabling garbage collection at the beginning of the script with GC.disable does not help.

Maybe this is a bug in the gobject-introspection gem.

@jcupitt
Copy link
Member

jcupitt commented Jul 15, 2017

I had a good idea on this. vips.rb has the code:

at_exit {
        Vips::shutdown if Vips.respond_to? :shutdown
}

https://github.com/jcupitt/ruby-vips/blob/master/lib/vips.rb#L142

Perhaps this is being triggered by minitest as a result of fork? Could you try deleting this code?

@felixbuenemann
Copy link
Contributor Author

Hey John, nice to hear from you!

The trouble with fork is usually related to file descriptor sharing and is not specific to ruby. Let's say you have a database connection open before you fork, then both the parent and child will access the same connection which is certain to cause trouble. So the usual approach is to close the connection before forking and reconnect after fork in both the parent and the child.

Such an issue would be easy to debug:

# Initialize Vips and do stuff with it
Process.wait fork do
  # work with vips here
end
# Continue in parent

As soon as the child exits it will call all at_exit handlers in the reverse order of their definition.

However I already mentioned above:

I have added some debug code to print the current PID (Process.pid) and Thread (Thread.current.object_id) and it shows the code is not forking and is running on the same thread.

What looks more dangerous is that you are using require during init and require is not thread safe in ruby, which could cause trouble if two threads are initializing Vips concurrently.

In fact I just found a way to reproduce the error from issue #107:

q=Queue.new
Thread.new { require "vips"; r = Vips::Access::SEQUENTIAL rescue $!; q << r }
Thread.new { require "vips"; r = Vips::Image.new_from_array([0]) rescue $!; q << r }
q.pop
=> #<NoMethodError: undefined method `new_from_array' for Vips::Image:Class
q.pop
=> #<Vips::Access sequential>

This clearly shows a race condition during concurrent init.

@jcupitt
Copy link
Member

jcupitt commented Jul 15, 2017

Hey, Felix! I agree, concurrent init will certainly fail. This seems like a simple thing to fix, fortunately.

@felixbuenemann
Copy link
Contributor Author

I can confirm this crash as fixed by #114.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants