1. 17 10月, 2018 3 次提交
  2. 28 3月, 2018 23 次提交
    • U
      merge revision(s) 60584,62954-62959,63008: · d32a6d37
      usa 提交于
      	webrick: support Proc objects as body responses
      
      	* lib/webrick/httpresponse.rb (send_body): call send_body_proc
      	  (send_body_proc): new method
      	  (class ChunkedWrapper): new class
      
      	* test/webrick/test_httpresponse.rb (test_send_body_proc): new test
      	  (test_send_body_proc_chunked): ditto
      	  [Feature #855]
      
      	webrick: favor .write over << method
      
      	This will make the next change to use IO.copy_stream
      	easier-to-read.  When we can drop Ruby 2.4 support in a few
      	years, this will allow us to use writev(2) with multiple
      	arguments for headers and chunked responses.
      
      	* lib/webrick/cgi.rb (write): new wrapper method
      	  lib/webrick/httpresponse.rb: (send_header): use socket.write
      	  (send_body_io): ditto
      	  (send_body_string): ditto
      	  (send_body_proc): ditto
      	  (_write_data): ditto
      	  (ChunkedWrapper#write): ditto
      	  (_send_file): ditto
      	------------------------------------------------------------------------
      	r62954 | normal | 2018-03-28 17:05:52 +0900 (水, 28 3 2018) | 14 lines
      
      	webrick/httpresponse: IO.copy_stream for regular files
      
      	Remove the redundant _send_file method since its functionality
      	is unnecessary with IO.copy_stream.  IO.copy_stream also allows
      	the use of sendfile under some OSes to speed up copies to
      	non-TLS sockets.
      
      	Testing with "curl >/dev/null" and "ruby -run -e httpd" to
      	read a 1G file over Linux loopback reveals a reduction from
      	around ~0.770 to ~0.490 seconds on the client side.
      
      	* lib/webrick/httpresponse.rb (send_body_io): use IO.copy_stream
      	  (_send_file): remove
      	  [Feature #14237]
      	------------------------------------------------------------------------
      	r62955 | normal | 2018-03-28 17:05:57 +0900 (水, 28 3 2018) | 10 lines
      
      	webrick: use IO.copy_stream for single range response
      
      	This is also compatible with range responses generated
      	by Rack::File (tested with rack 2.0.3).
      
      	* lib/webrick/httpresponse.rb (send_body_io): use Content-Range
      	* lib/webrick/httpservlet/filehandler.rb (make_partial_content):
      	  use File object for the single range case
      	* test/webrick/test_filehandler.rb (get_res_body): use send_body
      	  to test result
      	------------------------------------------------------------------------
      	r62956 | normal | 2018-03-28 17:06:02 +0900 (水, 28 3 2018) | 7 lines
      
      	test/webrick/test_filehandler.rb: stricter multipart range test
      
      	We need to ensure we generate compatibile output in
      	the face of future changes
      
      	* test/webrick/test_filehandler.rb (test_make_partial_content):
      	  check response body
      	------------------------------------------------------------------------
      	r62957 | normal | 2018-03-28 17:06:08 +0900 (水, 28 3 2018) | 8 lines
      
      	webrick: quiet warning for multi-part ranges
      
      	Content-Length is ignored by WEBrick::HTTPResponse even if we
      	calculate it, so instead we chunk responses to HTTP/1.1 clients
      	and terminate HTTP/1.0 connections.
      
      	* lib/webrick/httpservlet/filehandler.rb (make_partial_content):
      	  quiet warning
      	------------------------------------------------------------------------
      	r62958 | normal | 2018-03-28 17:06:13 +0900 (水, 28 3 2018) | 7 lines
      
      	webrick/httpresponse: make ChunkedWrapper copy_stream-compatible
      
      	The .write method needs to return the number of bytes written
      	to avoid confusing IO.copy_stream.
      
      	* lib/webrick/httpresponse.rb (ChunkedWrapper#write): return bytes written
      	  (ChunkedWrapper#<<): return self
      	------------------------------------------------------------------------
      	r62959 | normal | 2018-03-28 17:06:18 +0900 (水, 28 3 2018) | 9 lines
      
      	webrick: use IO.copy_stream for multipart response
      
      	Use the new Proc response body feature to generate a multipart
      	range response dynamically.  We use a flat array to minimize
      	object overhead as much as possible; as many ranges may fit
      	into an HTTP request header.
      
      	* lib/webrick/httpservlet/filehandler.rb (multipart_body): new method
      	  (make_partial_content): use multipart_body
      
      	get rid of test error/failure on Windows introduced at r62955
      
      	* lib/webrick/httpresponse.rb (send_body_io): use seek if NotImplementedError
      	  is raised in IO.copy_stream with offset.
      
      	* lib/webrick/httpservlet/filehandler.rb (multipart_body): ditto.
      
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@63014 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      d32a6d37
    • U
      merge revision(s) 63000: · 32c00d78
      usa 提交于
      	unixsocket.c: abstract namespace
      
      	* ext/socket/unixsocket.c (unixsock_path_value): fix r62991 for
      	  Linux abstract namespace.
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@63005 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      32c00d78
    • U
      merge revision(s) 62992: · b9121fe7
      usa 提交于
      	pack.c: fix underflow
      
      	* pack.c (pack_unpack_internal): get rid of underflow.
      	  https://hackerone.com/reports/298246
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62997 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      b9121fe7
    • U
      merge revision(s) 62991: · 634232aa
      usa 提交于
      	unixsocket.c: check NUL bytes
      
      	* ext/socket/unixsocket.c (rsock_init_unixsock): check NUL bytes.
      	  https://hackerone.com/reports/302997
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62996 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      634232aa
    • U
      merge revision(s) 62990: · a606704e
      usa 提交于
      	Ignore file separator from tmpfile/tmpdir name.
      
      	From: SHIBATA Hiroshi <hsbt@ruby-lang.org>
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62995 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      a606704e
    • U
      merge revision(s) 62989: · 89133faf
      usa 提交于
      	dir.c: check NUL bytes
      
      	* dir.c (GlobPathValue): should be used in rb_push_glob only.
      	  other methods should use FilePathValue.
      	  https://hackerone.com/reports/302338
      
      	* dir.c (rb_push_glob): expand GlobPathValue
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62994 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      89133faf
    • U
      merge revision(s) 62968: · eb2aca18
      usa 提交于
      	webrick: prevent response splitting and header injection
      
      	Original patch by tenderlove (with minor style adjustments).
      
      	* lib/webrick/httpresponse.rb (send_header): call check_header
      	  (check_header): raise on embedded CRLF in header value
      	* test/webrick/test_httpresponse.rb
      	  (test_prevent_response_splitting_headers): new test
      	* (test_prevent_response_splitting_cookie_headers): ditto
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62987 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      eb2aca18
    • U
      merge revision(s) 62960-62965: · 694697e3
      usa 提交于
      	webrick: use IO.copy_stream for multipart response
      
      	Use the new Proc response body feature to generate a multipart
      	range response dynamically.  We use a flat array to minimize
      	object overhead as much as possible; as many ranges may fit
      	into an HTTP request header.
      
      	* lib/webrick/httpservlet/filehandler.rb (multipart_body): new method
      	  (make_partial_content): use multipart_body
      	------------------------------------------------------------------------
      	r62960 | normal | 2018-03-28 17:06:23 +0900 (水, 28 3 2018) | 13 lines
      
      	webrick/httprequest: limit request headers size
      
      	We use the same 112 KB limit started (AFAIK) by Mongrel, Thin,
      	and Puma to prevent malicious users from using up all the memory
      	with a single request.  This also limits the damage done by
      	excessive ranges in multipart Range: requests.
      
      	Due to the way we rely on IO#gets and the desire to keep
      	the code simple, the actual maximum header may be 4093 bytes
      	larger than 112 KB, but we're splitting hairs at that point.
      
      	* lib/webrick/httprequest.rb: define MAX_HEADER_LENGTH
      	  (read_header): raise when headers exceed max length
      	------------------------------------------------------------------------
      	r62961 | normal | 2018-03-28 17:06:28 +0900 (水, 28 3 2018) | 9 lines
      
      	webrick/httpservlet/cgihandler: reduce memory use
      
      	WEBrick::HTTPRequest#body can be passed a block to process the
      	body in chunks.  Use this feature to avoid building a giant
      	string in memory.
      
      	* lib/webrick/httpservlet/cgihandler.rb (do_GET):
      	  avoid reading entire request body into memory
      	  (do_POST is aliased to do_GET, so it handles bodies)
      	------------------------------------------------------------------------
      	r62962 | normal | 2018-03-28 17:06:34 +0900 (水, 28 3 2018) | 7 lines
      
      	webrick/httprequest: raise correct exception
      
      	"BadRequest" alone does not resolve correctly, it is in the
      	HTTPStatus namespace.
      
      	* lib/webrick/httprequest.rb (read_chunked): use correct exception
      	* test/webrick/test_httpserver.rb (test_eof_in_chunk): new test
      	------------------------------------------------------------------------
      	r62963 | normal | 2018-03-28 17:06:39 +0900 (水, 28 3 2018) | 9 lines
      
      	webrick/httprequest: use InputBufferSize for chunked requests
      
      	While WEBrick::HTTPRequest#body provides a Proc interface
      	for streaming large request bodies, clients must not force
      	the server to use an excessively large chunk size.
      
      	* lib/webrick/httprequest.rb (read_chunk_size): limit each
      	  read and block.call to :InputBufferSize in config.
      	* test/webrick/test_httpserver.rb (test_big_chunks): new test
      	------------------------------------------------------------------------
      	r62964 | normal | 2018-03-28 17:06:44 +0900 (水, 28 3 2018) | 9 lines
      
      	webrick: add test for Digest auth-int
      
      	No changes to the actual code, this is a new test for
      	a feature for which no tests existed.  I don't understand
      	the Digest authentication code well at all, but this is
      	necessary for the subsequent change.
      
      	* test/webrick/test_httpauth.rb (test_digest_auth_int): new test
      	  (credentials_for_request): support bodies with POST
      	------------------------------------------------------------------------
      	r62965 | normal | 2018-03-28 17:06:49 +0900 (水, 28 3 2018) | 18 lines
      
      	webrick/httpauth/digestauth: stream req.body
      
      	WARNING! WARNING! WARNING!  LIKELY BROKEN CHANGE
      
      	Pass a proc to WEBrick::HTTPRequest#body to avoid reading a
      	potentially large request body into memory during
      	authentication.
      
      	WARNING! this will break apps completely which want to do
      	something with the body besides calculating the MD5 digest
      	of it.
      
      	Also, keep in mind that probably nobody uses "auth-int".
      	Servers such as Apache, lighttpd, nginx don't seem to
      	support it; nor does curl when using POST/PUT bodies;
      	and we didn't have tests for it until now...
      
      	* lib/webrick/httpauth/digestauth.rb (_authenticate): stream req.body
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62970 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      694697e3
    • U
      backport some changes from openssl gem v2.0.6 and v2.0.7. · cbe9a21e
      usa 提交于
      	[Backport #13935]
      
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62951 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      cbe9a21e
    • U
      merge revision(s) 62725: [Backport #14604] · 134967e5
      usa 提交于
      	Fix setting method visibility on method wrapped with prepend
      
      	Ignore prepended modules when looking for already defined methods on a
      	class to set the visibility on.
      	[Fix GH-1834]
      
      	From: Dylan Thacker-Smith <Dylan.Smith@shopify.com>
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62950 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      134967e5
    • U
      merge revision(s) 62671: [Backport #14571] · 84ec88a2
      usa 提交于
      	resolv.rb: close socket
      
      	* lib/resolv.rb (UnconnectedUDP#lazy_initialize): store new
      	  sockets before binding, so the sockets get closed when the
      	  requester is closing.
      
      	* lib/resolv.rb (ConnectedUDP#lazy_initialize): ditto.
      
      	* lib/resolv.rb (UnconnectedUDP#close): synchronize to get rid of
      	  race condition.
      
      	* lib/resolv.rb (ConnectedUDP#close): ditto.
      
      	[ruby-core:85901] [Bug #14571]
      
      	From: quixoten (Devin Christensen) <quixoten@gmail.com>
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62949 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      84ec88a2
    • U
      merge revision(s) 60162: [Backport #13994] · b63b168c
      usa 提交于
      	socket.c: null byte at Socket.getnameinfo
      
      	* ext/socket/socket.c (sock_s_getnameinfo): check null byte.
      	  patched by tommy (Masahiro Tomita) in [ruby-dev:50286].
      	  [Bug #13994]
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62948 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      b63b168c
    • U
      merge revision(s) 62572: [Backport #14549] · 58cfb065
      usa 提交于
      	date_core.c: defensive code
      
      	* ext/date/date_core.c (f_cmp): check comparison failure.
      
      	* ext/date/date_core.c (d_lite_step): deal with the comparison
      	  result more defensively.  [ruby-core:85796] [Bug #14549]
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62947 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      58cfb065
    • U
      merge revision(s) 62040: [Backport #14388] · aaf1f031
      usa 提交于
      	string.c: clear substring code range
      
      	* string.c (str_substr): substring of broken code range string may
      	  be valid or broken.  patch by tommy (Masahiro Tomita) at
      	  [ruby-dev:50430] [Bug #14388].
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62946 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      aaf1f031
    • U
      merge revision(s) 57637: [Backport #14453] · dc4e42b9
      usa 提交于
      	win32.c: memcpy instead of strlcpy
      
      	* win32/win32.c (cmdglob): memcpy the exact size instead of
      	  strlcpy with +1.
      
      	* win32/win32.c (w32_cmdvector): ditto, with NUL-terminating.
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62945 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      dc4e42b9
    • U
      merge revision(s) 61603: [Backport #14279] · 0b46bbf7
      usa 提交于
      	check array for zsuper. [Bug #14279]
      
      	* compile.c (iseq_compile_each0): for zsuper (NODE_ZSUPER), we need to check
      	  given argument is Array or not.
      
      	* test/ruby/test_super.rb: add a test for this bug.
      
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62944 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      0b46bbf7
    • U
      merge revision(s) 61639: [Backport #14323] · 08987d31
      usa 提交于
      	net/ftp: fix FrozenError in BufferedSocket
      
      	I noticed this bug while working on something else with
      	RUBYOPT=-d on, existing test cases all passed with it.
      
      	Note: I use String.new because it is the local style, here,
      	I prefer +'' (or ''.b, for a future commit)
      
      	* lib/net/ftp.rb (BufferedSocket#read): use String.new
      	* test/net/ftp/test_buffered_socket.rb (test_read_nil): new test
      	  [Bug #14323]
      
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62943 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      08987d31
    • U
      merge revision(s) 58438,58440,58451: [Backport #13493] · f444a7ab
      usa 提交于
      	clean autogenerated files
      
      	* enc/depend (clean, clean-srcs): fix path of name2ctype.h, and
      	  remove casefold.h too.
      
      	* enc/jis/props.h: autogenerated file.
      	  [ruby-core:80823] [Bug #13493]
      
      	Update sources and include files after update
      
      	Ignore enc/jis/props.h
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62942 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      f444a7ab
    • U
      merge revision(s) 61562,61563,61566,61568,61569: [Backport #14269] · 815d4c4e
      usa 提交于
      	fix SEGV touching uninitialized memory
      
      	This function can be called from boot_defclass().
      	No assumption can be made about object internals.
      
      	(lldb) run
      	Process 2386 launched: './miniruby' (x86_64)
      	Process 2386 stopped
      	* thread #1: tid = 0x13f3b6, 0x00000001001e0b26 miniruby`rb_class_path_cached(klass=4311373720) + 20 at variable.c:321, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x8)
      	    frame #0: 0x00000001001e0b26 miniruby`rb_class_path_cached(klass=4311373720) + 20 at variable.c:321
      	   318  VALUE
      	   319  rb_class_path_cached(VALUE klass)
      	   320  {
      	-> 321      st_table *ivtbl = RCLASS_IV_TBL(klass);
      	   322      st_data_t n;
      	   323
      	   324      if (!ivtbl) return Qnil;
      	(lldb) bt
      	* thread #1: tid = 0x13f3b6, 0x00000001001e0b26 miniruby`rb_class_path_cached(klass=4311373720) + 20 at variable.c:321, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x8)
      	  * frame #0: 0x00000001001e0b26 miniruby`rb_class_path_cached(klass=4311373720) + 20 at variable.c:321
      	    frame #1: 0x000000010009cbd0 miniruby`rb_raw_obj_info(buff="0x0000000100fa5798 [2    ] T_CLASS", buff_size=256, obj=4311373720) + 1393 at gc.c:9341
      	    frame #2: 0x000000010009cf16 miniruby`obj_info(obj=4311373720) + 98 at gc.c:9423
      	    frame #3: 0x000000010008ca87 miniruby`newobj_init(klass=0, flags=66, v1=0, v2=0, v3=0, wb_protected=1, objspace=0x00000001007cf280, obj=4311373720) + 338 at gc.c:1887
      	    frame #4: 0x000000010008cd51 miniruby`newobj_of(klass=0, flags=66, v1=0, v2=0, v3=0, wb_protected=1) + 171 at gc.c:1970
      	    frame #5: 0x000000010008ce1b miniruby`rb_wb_protected_newobj_of(klass=0, flags=66) + 54 at gc.c:1990
      	    frame #6: 0x0000000100027563 miniruby`class_alloc(flags=2, klass=0) + 46 at class.c:165
      	    frame #7: 0x000000010002761a miniruby`rb_class_boot(super=0) + 35 at class.c:203
      	    frame #8: 0x0000000100028612 miniruby`boot_defclass(name="BasicObject", super=0) + 28 at class.c:537
      	    frame #9: 0x000000010002868b miniruby`Init_class_hierarchy + 26 at class.c:548
      	    frame #10: 0x00000001000efe69 miniruby`InitVM_Object + 9 at object.c:3892
      	    frame #11: 0x00000001000f138e miniruby`Init_Object + 57 at object.c:4122
      	    frame #12: 0x00000001000a59bd miniruby`rb_call_inits + 29 at inits.c:23
      	    frame #13: 0x000000010007af30 miniruby`ruby_setup + 229 at eval.c:61
      	    frame #14: 0x000000010007af7e miniruby`ruby_init + 13 at eval.c:78
      	    frame #15: 0x0000000100000c58 miniruby`main(argc=2, argv=0x00007fff5fbfdbf0) + 88 at main.c:41
      	    frame #16: 0x00007fff88eda5ad libdyld.dylib`start + 1
      	(lldb)
      
      	fix SEGV touching uninitialized memory
      
      	This function can be called from InitVM_Object().
      	No assumption can be made about object internals.
      
      	(lldb) run
      	Process 10675 launched: './miniruby' (x86_64)
      	Process 10675 stopped
      	* thread #1: tid = 0x14252c, 0x00000001000bdda9 miniruby`rb_raw_obj_info(buff="0x0000000100fc1588 [0    ] T_IMEMO ment", buff_size=256, obj=4311487880) + 2489 at gc.c:9383, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
      	    frame #0: 0x00000001000bdda9 miniruby`rb_raw_obj_info(buff="0x0000000100fc1588 [0    ] T_IMEMO ment", buff_size=256, obj=4311487880) + 2489 at gc.c:9383
      	   9380                 const rb_method_entry_t *me = &RANY(obj)->as.imemo.ment;
      	   9381                 snprintf(buff, buff_size, "%s (called_id: %s, type: %s, alias: %d, owner: %s, defined_class: %s)", buff,
      	   9382                          rb_id2name(me->called_id),
      	-> 9383                          method_type_name(me->def->type),
      	   9384                          me->def->alias_count,
      	   9385                          obj_info(me->owner),
      	   9386                          obj_info(me->defined_class));
      	(lldb) p *me
      	(rb_method_entry_t) $0 = {
      	  flags = 24602
      	  defined_class = 4311488400
      	  def = 0x0000000000000000
      	  called_id = 3057
      	  owner = 4311488400
      	}
      	(lldb) bt
      	* thread #1: tid = 0x14252c, 0x00000001000bdda9 miniruby`rb_raw_obj_info(buff="0x0000000100fc1588 [0    ] T_IMEMO ment", buff_size=256, obj=4311487880) + 2489 at gc.c:9383, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
      	  * frame #0: 0x00000001000bdda9 miniruby`rb_raw_obj_info(buff="0x0000000100fc1588 [0    ] T_IMEMO ment", buff_size=256, obj=4311487880) + 2489 at gc.c:9383
      	    frame #1: 0x00000001000b7cbf miniruby`obj_info(obj=4311487880) + 95 at gc.c:9423
      	    frame #2: 0x00000001000c16a8 miniruby`newobj_init(klass=4311488400, flags=24602, v1=0, v2=3057, v3=4311488400, wb_protected=1, objspace=0x00000001007ee280, obj=4311487880) + 424 at gc.c:1887
      	    frame #3: 0x00000001000b4529 miniruby`newobj_of(klass=4311488400, flags=24602, v1=0, v2=3057, v3=4311488400, wb_protected=1) + 217 at gc.c:1970
      	    frame #4: 0x00000001000b46ab miniruby`rb_imemo_new(type=imemo_ment, v1=0, v2=3057, v3=4311488400, v0=4311488400) + 75 at gc.c:2017
      	    frame #5: 0x00000001002773b4 miniruby`rb_method_entry_alloc(called_id=3057, owner=4311488400, defined_class=4311488400, def=0x0000000000000000) + 52 at vm_method.c:368
      	    frame #6: 0x0000000100277307 miniruby`rb_method_entry_create(called_id=3057, klass=4311488400, visi=METHOD_VISI_PRIVATE, def=0x0000000000000000) + 71 at vm_method.c:389
      	    frame #7: 0x00000001002784c7 miniruby`rb_method_entry_make(klass=4311488400, mid=3057, defined_class=4311488400, visi=METHOD_VISI_PRIVATE, type=VM_METHOD_TYPE_CFUNC, def=0x0000000000000000, original_id=3057, opts=0x00007fff5fbfd9e8) + 1207 at vm_method.c:594
      	    frame #8: 0x00000001002770f9 miniruby`rb_add_method(klass=4311488400, mid=3057, type=VM_METHOD_TYPE_CFUNC, opts=0x00007fff5fbfd9e8, visi=METHOD_VISI_PRIVATE) + 73 at vm_method.c:650
      	    frame #9: 0x000000010027708a miniruby`rb_add_method_cfunc(klass=4311488400, mid=3057, func=(miniruby`rb_obj_dummy at object.c:1125), argc=0, visi=METHOD_VISI_PRIVATE) + 138 at vm_method.c:137
      	    frame #10: 0x00000001000391e4 miniruby`rb_define_private_method(klass=4311488400, name="initialize", func=(miniruby`rb_obj_dummy at object.c:1125), argc=0) + 68 at class.c:1529
      	    frame #11: 0x000000010013f5bf miniruby`InitVM_Object + 47 at object.c:3905
      	    frame #12: 0x0000000100142ffd miniruby`Init_Object + 61 at object.c:4122
      	    frame #13: 0x00000001000d4edd miniruby`rb_call_inits + 29 at inits.c:23
      	    frame #14: 0x000000010009fe66 miniruby`ruby_setup + 198 at eval.c:61
      	    frame #15: 0x000000010009febd miniruby`ruby_init + 13 at eval.c:78
      	    frame #16: 0x0000000100000a4d miniruby`main(argc=2, argv=0x00007fff5fbfdbf0) + 93 at main.c:41
      	    frame #17: 0x00007fff88eda5ad libdyld.dylib`start + 1
      	(lldb)
      
      	fix SEGV touching uninitialized local variable
      
      	This imemo_name is used uninitialized because the switch
      	above does not cover all possible imemo types.
      
      	(lldb) run
      	Process 26068 launched: './miniruby' (x86_64)
      	Process 26068 stopped
      	* thread #1: tid = 0x14ba96, 0x00007fff8a402132 libsystem_c.dylib`strlen + 18, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xfffffffffffffff0)
      	    frame #0: 0x00007fff8a402132 libsystem_c.dylib`strlen + 18
      	libsystem_c.dylib`strlen:
      	->  0x7fff8a402132 <+18>: pcmpeqb (%rdi), %xmm0
      	    0x7fff8a402136 <+22>: pmovmskb %xmm0, %esi
      	    0x7fff8a40213a <+26>: andq   $0xf, %rcx
      	    0x7fff8a40213e <+30>: orq    $-0x1, %rax
      	(lldb) bt
      	* thread #1: tid = 0x14ba96, 0x00007fff8a402132 libsystem_c.dylib`strlen + 18, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xfffffffffffffff0)
      	  * frame #0: 0x00007fff8a402132 libsystem_c.dylib`strlen + 18
      	    frame #1: 0x00000001001f1531 miniruby`BSD_vfprintf(fp=0x00007fff5fbfc9e0, fmt0="%s %s", ap=0x00007fff5fbfcbf0) + 5873 at vsnprintf.c:1026
      	    frame #2: 0x00000001001ef213 miniruby`ruby_do_vsnprintf(str="0x0000000100f46450 [0    ] T_IMEMO", n=256, fmt="%s %s", ap=0x00007fff5fbfcbf0) + 131 at sprintf.c:1285
      	    frame #3: 0x00000001001ef3ea miniruby`ruby_snprintf(str="0x0000000100f46450 [0    ] T_IMEMO", n=256, fmt="%s %s") + 426 at sprintf.c:1300
      	    frame #4: 0x00000001000bdc61 miniruby`rb_raw_obj_info(buff="0x0000000100f46450 [0    ] T_IMEMO", buff_size=256, obj=4310983760) + 2353 at gc.c:9376
      	    frame #5: 0x00000001000b7bff miniruby`obj_info(obj=4310983760) + 95 at gc.c:9428
      	    frame #6: 0x00000001000c1658 miniruby`newobj_init(klass=0, flags=36890, v1=0, v2=4303040512, v3=4310983800, wb_protected=1, objspace=0x00000001007ee280, obj=4310983760) + 424 at gc.c:1887
      	    frame #7: 0x00000001000b4469 miniruby`newobj_of(klass=0, flags=36890, v1=0, v2=4303040512, v3=4310983800, wb_protected=1) + 217 at gc.c:1970
      	    frame #8: 0x00000001000b45eb miniruby`rb_imemo_new(type=imemo_ast, v1=0, v2=4303040512, v3=4310983800, v0=0) + 75 at gc.c:2017
      	    frame #9: 0x000000010011daed miniruby`rb_ast_new + 61 at node.c:1146
      	    frame #10: 0x0000000100160e15 miniruby`rb_parser_compile_file_path(vparser=4310984400, fname=4310984960, file=4310984080, start=1) + 53 at parse.y:5776
      	    frame #11: 0x00000001001e18ea miniruby`load_file_internal(argp_v=140734799795024) + 1834 at ruby.c:1907
      	    frame #12: 0x00000001000a1bb5 miniruby`rb_ensure(b_proc=(miniruby`load_file_internal at ruby.c:1795), data1=140734799795024, e_proc=(miniruby`restore_load_file at ruby.c:2007), data2=140734799795024) + 245 at eval.c:1037
      	    frame #13: 0x00000001001df4a4 miniruby`load_file(parser=4310984400, fname=4310984960, f=4310984080, script=1, opt=0x00007fff5fbfda28) + 100 at ruby.c:2026
      	    frame #14: 0x00000001001e084e miniruby`process_options(argc=0, argv=0x00007fff5fbfdc00, opt=0x00007fff5fbfda28) + 3454 at ruby.c:1682
      	    frame #15: 0x00000001001dfaae miniruby`ruby_process_options(argc=2, argv=0x00007fff5fbfdbf0) + 238 at ruby.c:2257
      	    frame #16: 0x000000010009ff43 miniruby`ruby_options(argc=2, argv=0x00007fff5fbfdbf0) + 211 at eval.c:105
      	    frame #17: 0x0000000100000989 miniruby`main(argc=2, argv=0x00007fff5fbfdbf0) + 105 at main.c:42
      	    frame #18: 0x00007fff88eda5ad libdyld.dylib`start + 1
      	(lldb) up 4
      	frame #4: 0x00000001000bdc61 miniruby`rb_raw_obj_info(buff="0x0000000100f46450 [0    ] T_IMEMO", buff_size=256, obj=4310983760) + 2353 at gc.c:9376
      	   9373 #undef IMEMO_NAME
      	   9374               default: UNREACHABLE;
      	   9375             }
      	-> 9376             snprintf(buff, buff_size, "%s %s", buff, imemo_name);
      	   9377
      	   9378             switch (imemo_type(obj)) {
      	   9379               case imemo_ment: {
      	(lldb) p imemo_name
      	(const char *) $0 = 0xffffffffffffffff
      	(lldb) p imemo_type(obj)
      	(imemo_type) $1 = imemo_ast
      	(lldb)
      
      	fix SEGV inspecting already freed objects
      
      	obj_info() assumes the given object is alive.  Passing freed
      	objects to it results in SEGV.
      
      	(lldb) run
      	Process 29718 launched: './miniruby' (x86_64)
      	Process 29718 stopped
      	* thread #1: tid = 0x3082c5, 0x00000001000bfaab miniruby`pathobj_path(pathobj=4478683640) + 70 at vm_core.h:269, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
      	    frame #0: 0x00000001000bfaab miniruby`pathobj_path(pathobj=4478683640) + 70 at vm_core.h:269
      	   266      }
      	   267      else {
      	   268          VM_ASSERT(RB_TYPE_P(pathobj, T_ARRAY));
      	-> 269          return RARRAY_AREF(pathobj, PATHOBJ_PATH);
      	   270      }
      	   271  }
      	   272
      	(lldb) bt
      	* thread #1: tid = 0x3082c5, 0x00000001000bfaab miniruby`pathobj_path(pathobj=4478683640) + 70 at vm_core.h:269, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
      	  * frame #0: 0x00000001000bfaab miniruby`pathobj_path(pathobj=4478683640) + 70 at vm_core.h:269
      	    frame #1: 0x00000001000c25ff miniruby`rb_iseq_path(iseq=0x000000010af34a20) + 32 at iseq.c:723
      	    frame #2: 0x000000010009db09 miniruby`rb_raw_iseq_info(buff="0x000000010af34a20 [1    ] T_IMEMO iseq", buff_size=256, iseq=0x000000010af34a20) + 69 at gc.c:9274
      	    frame #3: 0x000000010009e45a miniruby`rb_raw_obj_info(buff="0x000000010af34a20 [1    ] T_IMEMO iseq", buff_size=256, obj=4478683680) + 2191 at gc.c:9397
      	    frame #4: 0x000000010009e4d5 miniruby`obj_info(obj=4478683680) + 98 at gc.c:9429
      	    frame #5: 0x0000000100091ae3 miniruby`gc_page_sweep(objspace=0x00000001007d3280, heap=0x00000001007d32a0, sweep_page=0x000000010ae07bc0) + 622 at gc.c:3529
      	    frame #6: 0x000000010009206a miniruby`gc_sweep_step(objspace=0x00000001007d3280, heap=0x00000001007d32a0) + 188 at gc.c:3705
      	    frame #7: 0x0000000100092254 miniruby`gc_sweep_continue(objspace=0x00000001007d3280, heap=0x00000001007d32a0) + 133 at gc.c:3772
      	    frame #8: 0x000000010008d7f9 miniruby`heap_prepare(objspace=0x00000001007d3280, heap=0x00000001007d32a0) + 48 at gc.c:1746
      	    frame #9: 0x000000010008d8a1 miniruby`heap_get_freeobj_from_next_freepage(objspace=0x00000001007d3280, heap=0x00000001007d32a0) + 37 at gc.c:1769
      	    frame #10: 0x000000010008d98d miniruby`heap_get_freeobj(objspace=0x00000001007d3280, heap=0x00000001007d32a0) + 83 at gc.c:1803
      	    frame #11: 0x000000010008dcb0 miniruby`newobj_slowpath(klass=4334386280, flags=5, v1=0, v2=0, v3=0, objspace=0x00000001007d3280, wb_protected=1) + 220 at gc.c:1930
      	    frame #12: 0x000000010008dd6c miniruby`newobj_slowpath_wb_protected(klass=4334386280, flags=5, v1=0, v2=0, v3=0, objspace=0x00000001007d3280) + 76 at gc.c:1942
      	    frame #13: 0x000000010008dea1 miniruby`newobj_of(klass=4334386280, flags=5, v1=0, v2=0, v3=0, wb_protected=1) + 221 at gc.c:1974
      	    frame #14: 0x000000010008df39 miniruby`rb_wb_protected_newobj_of(klass=4334386280, flags=5) + 54 at gc.c:1990
      	    frame #15: 0x0000000100195f7c miniruby`str_alloc(klass=4334386280) + 29 at string.c:692
      	    frame #16: 0x0000000100195fe9 miniruby`str_new0(klass=4334386280, ptr="gitm", len=4, termlen=1) + 73 at string.c:714
      	    frame #17: 0x000000010019633e miniruby`rb_enc_str_new(ptr="gitm", len=4, enc=0x00000001025d50a0) + 81 at string.c:766
      	    frame #18: 0x000000010010a80a miniruby`parser_str_new(p="gitm", n=4, enc=0x00000001025d50a0, func=66, enc0=0x00000001025d50a0) + 50 at parse.y:5817
      	    frame #19: 0x000000010010ce1a miniruby`parser_parse_string(parser=0x00000001042ac5c0, quote=0x000000010460c028) + 795 at parse.y:6675
      	    frame #20: 0x00000001001120bd miniruby`parser_yylex(parser=0x00000001042ac5c0) + 159 at parse.y:8281
      	    frame #21: 0x0000000100115068 miniruby`yylex(lval=0x00007fff5fbf9948, yylloc=0x00007fff5fbf9ab0, parser=0x00000001042ac5c0) + 55 at parse.y:8931
      	    frame #22: 0x00000001000fc79f miniruby`ruby_yyparse(parser=0x00000001042ac5c0) + 1198 at parse.c:5798
      	    frame #23: 0x0000000100109f5a miniruby`yycompile0(arg=4364879296) + 317 at parse.y:5595
      	    frame #24: 0x0000000100214ef0 miniruby`rb_suppress_tracing(func=(miniruby`yycompile0 at parse.y:5565), arg=4364879296) + 349 at vm_trace.c:397
      	    frame #25: 0x000000010010a1df miniruby`yycompile(parser=0x00000001042ac5c0, fname=4443743440, line=1) + 126 at parse.y:5637
      	    frame #26: 0x000000010010a4c1 miniruby`parser_compile_string(vparser=4443743480, fname=4443743440, s=4443743520, line=1) + 191 at parse.y:5706
      	    frame #27: 0x000000010010a5b7 miniruby`rb_parser_compile_string_path(vparser=4443743480, f=4443743440, s=4443743520, line=1) + 58 at parse.y:5730
      	    frame #28: 0x0000000100206025 miniruby`eval_make_iseq(src=4443743520, fname=4443743440, line=1, bind=0x0000000000000000, base_block=0x00007fff5fbfb370) + 266 at vm_eval.c:1274
      	    frame #29: 0x0000000100206153 miniruby`eval_string_with_cref(self=4334412520, src=4443743520, cref=0x0000000000000000, file=52, line=1) + 197 at vm_eval.c:1307
      	    frame #30: 0x0000000100206389 miniruby`rb_f_eval(argc=1, argv=0x0000000102400eb8, self=4334412520) + 219 at vm_eval.c:1382
      	    frame #31: 0x00000001001f247c miniruby`call_cfunc_m1(func=(miniruby`rb_f_eval at vm_eval.c:1364), recv=4334412520, argc=1, argv=0x0000000102400eb8) + 47 at vm_insnhelper.c:1723
      	    frame #32: 0x00000001001f2f87 miniruby`vm_call_cfunc_with_frame(ec=0x00000001007d3548, reg_cfp=0x0000000102500d80, calling=0x00007fff5fbfbf50, ci=0x000000010263f240, cc=0x0000000100749b50) + 386 at vm_insnhelper.c:1918
      	    frame #33: 0x00000001001f30d6 miniruby`vm_call_cfunc(ec=0x00000001007d3548, reg_cfp=0x0000000102500d80, calling=0x00007fff5fbfbf50, ci=0x000000010263f240, cc=0x0000000100749b50) + 149 at vm_insnhelper.c:1934
      	    frame #34: 0x00000001001faf0e miniruby`vm_exec_core(ec=0x00000001007d3548, initial=0) + 8471 at insns.def:915
      	    frame #35: 0x000000010020b75d miniruby`vm_exec(ec=0x00000001007d3548) + 230 at vm.c:1771
      	    frame #36: 0x00000001002093f8 miniruby`invoke_block(ec=0x00000001007d3548, iseq=0x000000010252d7f0, self=4334412520, captured=0x0000000102500df8, cref=0x0000000000000000, type=572653569, opt_pc=0) + 224 at vm.c:988
      	    frame #37: 0x0000000100209766 miniruby`invoke_iseq_block_from_c(ec=0x00000001007d3548, captured=0x0000000102500df8, self=4334412520, argc=0, argv=0x0000000000000000, passed_block_handler=0, cref=0x0000000000000000, is_lambda=0) + 389 at vm.c:1040
      	    frame #38: 0x0000000100209824 miniruby`invoke_block_from_c_bh(ec=0x00000001007d3548, block_handler=4333768185, argc=0, argv=0x0000000000000000, passed_block_handler=0, cref=0x0000000000000000, is_lambda=0, force_blockarg=0) + 138 at vm.c:1058
      	    frame #39: 0x00000001002099d0 miniruby`vm_yield(ec=0x00000001007d3548, argc=0, argv=0x0000000000000000) + 69 at vm.c:1103
      	    frame #40: 0x0000000100205623 miniruby`rb_yield_0(argc=0, argv=0x0000000000000000) + 40 at vm_eval.c:970
      	    frame #41: 0x0000000100205964 miniruby`loop_i + 19 at vm_eval.c:1049
      	    frame #42: 0x000000010007db07 miniruby`rb_rescue2(b_proc=(miniruby`loop_i at vm_eval.c:1047), data1=0, r_proc=(miniruby`loop_stop at vm_eval.c:1056), data2=0) + 369 at eval.c:896
      	    frame #43: 0x0000000100205a2e miniruby`rb_f_loop(self=4334412520) + 121 at vm_eval.c:1100
      	    frame #44: 0x00000001001f24a7 miniruby`call_cfunc_0(func=(miniruby`rb_f_loop at vm_eval.c:1098), recv=4334412520, argc=0, argv=0x0000000102400e80) + 41 at vm_insnhelper.c:1729
      	    frame #45: 0x00000001001f2f87 miniruby`vm_call_cfunc_with_frame(ec=0x00000001007d3548, reg_cfp=0x0000000102500de0, calling=0x00007fff5fbfd4d0, ci=0x000000010263bbf0, cc=0x0000000102642118) + 386 at vm_insnhelper.c:1918
      	    frame #46: 0x00000001001f30d6 miniruby`vm_call_cfunc(ec=0x00000001007d3548, reg_cfp=0x0000000102500de0, calling=0x00007fff5fbfd4d0, ci=0x000000010263bbf0, cc=0x0000000102642118) + 149 at vm_insnhelper.c:1934
      	    frame #47: 0x00000001001f4319 miniruby`vm_call_method_each_type(ec=0x00000001007d3548, cfp=0x0000000102500de0, calling=0x00007fff5fbfd4d0, ci=0x000000010263bbf0, cc=0x0000000102642118) + 239 at vm_insnhelper.c:2232
      	    frame #48: 0x00000001001f4a2c miniruby`vm_call_method(ec=0x00000001007d3548, cfp=0x0000000102500de0, calling=0x00007fff5fbfd4d0, ci=0x000000010263bbf0, cc=0x0000000102642118) + 253 at vm_insnhelper.c:2366
      	    frame #49: 0x00000001001f4b7a miniruby`vm_call_general(ec=0x00000001007d3548, reg_cfp=0x0000000102500de0, calling=0x00007fff5fbfd4d0, ci=0x000000010263bbf0, cc=0x0000000102642118) + 59 at vm_insnhelper.c:2398
      	    frame #50: 0x00000001001fab2f miniruby`vm_exec_core(ec=0x00000001007d3548, initial=0) + 7480 at insns.def:850
      	    frame #51: 0x000000010020b75d miniruby`vm_exec(ec=0x00000001007d3548) + 230 at vm.c:1771
      	    frame #52: 0x000000010020c40f miniruby`rb_iseq_eval_main(iseq=0x000000010252dd90) + 52 at vm.c:2019
      	    frame #53: 0x000000010007c768 miniruby`ruby_exec_internal(n=0x000000010252dd90) + 297 at eval.c:246
      	    frame #54: 0x000000010007c88e miniruby`ruby_exec_node(n=0x000000010252dd90) + 36 at eval.c:310
      	    frame #55: 0x000000010007c861 miniruby`ruby_run_node(n=0x000000010252dd90) + 62 at eval.c:302
      	    frame #56: 0x000000010000138d miniruby`main(argc=2, argv=0x00007fff5fbfdbf0) + 113 at main.c:42
      	    frame #57: 0x00007fff88eda5ad libdyld.dylib`start + 1
      	(lldb) p ((struct RVALUE*)pathobj)->as.basic
      	(RBasic) $0 = (flags = 0, klass = 4478683600)
      	(lldb)
      
      	fix SEGV inspecting uninitialized objects
      
      	obj_info() assumes the given object is alive.  OTOH
      	gc_writebarrier_incremental is called before or in middle of
      	object initialization.  Can casue SEGV.
      
      	(lldb) run
      	Process 48188 launched: './miniruby' (x86_64)
      	Process 48188 stopped
      	* thread #1: tid = 0x30fd53, 0x00000001000bf7a9 miniruby`rb_array_const_ptr(a=5251291222225483145) + 12 at ruby.h:2072, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
      	    frame #0: 0x00000001000bf7a9 miniruby`rb_array_const_ptr(a=5251291222225483145) + 12 at ruby.h:2072
      	   2069 static inline const VALUE *
      	   2070 rb_array_const_ptr(VALUE a)
      	   2071 {
      	-> 2072     return FIX_CONST_VALUE_PTR((RBASIC(a)->flags & RARRAY_EMBED_FLAG) ?
      	   2073         RARRAY(a)->as.ary : RARRAY(a)->as.heap.ptr);
      	   2074 }
      	   2075
      	(lldb) bt
      	* thread #1: tid = 0x30fd53, 0x00000001000bf7a9 miniruby`rb_array_const_ptr(a=5251291222225483145) + 12 at ruby.h:2072, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
      	  * frame #0: 0x00000001000bf7a9 miniruby`rb_array_const_ptr(a=5251291222225483145) + 12 at ruby.h:2072
      	    frame #1: 0x00000001000bfaab miniruby`pathobj_path(pathobj=5251291222225483145) + 70 at vm_core.h:269
      	    frame #2: 0x00000001000c25ff miniruby`rb_iseq_path(iseq=0x00000001025b71a8) + 32 at iseq.c:723
      	    frame #3: 0x000000010009db09 miniruby`rb_raw_iseq_info(buff="0x00000001025b7158 [0    ] proc (Proc)", buff_size=256, iseq=0x00000001025b71a8) + 69 at gc.c:9274
      	    frame #4: 0x000000010009e1d5 miniruby`rb_raw_obj_info(buff="0x00000001025b7158 [0    ] proc (Proc)", buff_size=256, obj=4334514520) + 1546 at gc.c:9351
      	    frame #5: 0x000000010009e4d5 miniruby`obj_info(obj=4334514520) + 98 at gc.c:9429
      	    frame #6: 0x0000000100096658 miniruby`gc_writebarrier_incremental(a=4334514520, b=4334514600, objspace=0x00000001007d3280) + 61 at gc.c:5963
      	    frame #7: 0x00000001000968ca miniruby`rb_gc_writebarrier(a=4334514520, b=4334514600) + 127 at gc.c:6009
      	    frame #8: 0x00000001001eabe0 miniruby`rb_obj_written(a=4334514520, oldv=52, b=4334514600, filename="/Users/urabe.shyouhei/data/src/pedantic/vm.c", line=821) + 72 at ruby.h:1472
      	    frame #9: 0x00000001001eac2c miniruby`rb_obj_write(a=4334514520, slot=0x000000010259ff10, b=4334514600, filename="/Users/urabe.shyouhei/data/src/pedantic/vm.c", line=821) + 70 at ruby.h:1489
      	    frame #10: 0x0000000100208b6f miniruby`vm_proc_create_from_captured(klass=4311027960, captured=0x0000000102500338, block_type=block_type_ifunc, is_from_method='\0', is_lambda='\x01') + 137 at vm.c:821
      	    frame #11: 0x0000000100208e5c miniruby`rb_vm_make_proc_lambda(ec=0x00000001007d3548, captured=0x0000000102500338, klass=4311027960, is_lambda='\x01') + 134 at vm.c:892
      	    frame #12: 0x000000010011f08e miniruby`proc_new(klass=4311027960, is_lambda='\x01') + 445 at proc.c:752
      	    frame #13: 0x000000010011f110 miniruby`rb_block_lambda + 27 at proc.c:808
      	    frame #14: 0x00000001001f24a7 miniruby`call_cfunc_0(func=(miniruby`rb_block_lambda at proc.c:807), recv=4310991600, argc=0, argv=0x0000000000000000) + 41 at vm_insnhelper.c:1729
      	    frame #15: 0x00000001002033de miniruby`vm_call0_cfunc_with_frame(ec=0x00000001007d3548, calling=0x00007fff5fbfb080, ci=0x00007fff5fbfb070, cc=0x00007fff5fbfb0a0, argv=0x0000000000000000) + 370 at vm_eval.c:85
      	    frame #16: 0x00000001002034d9 miniruby`vm_call0_cfunc(ec=0x00000001007d3548, calling=0x00007fff5fbfb080, ci=0x00007fff5fbfb070, cc=0x00007fff5fbfb0a0, argv=0x0000000000000000) + 59 at vm_eval.c:100
      	    frame #17: 0x000000010020368f miniruby`vm_call0_body(ec=0x00000001007d3548, calling=0x00007fff5fbfb080, ci=0x00007fff5fbfb070, cc=0x00007fff5fbfb0a0, argv=0x0000000000000000) + 436 at vm_eval.c:131
      	    frame #18: 0x000000010020326a miniruby`vm_call0(ec=0x00000001007d3548, recv=4310991600, id=2993, argc=0, argv=0x0000000000000000, me=0x0000000100f48110) + 142 at vm_eval.c:58
      	    frame #19: 0x0000000100203c60 miniruby`rb_call0(ec=0x00000001007d3548, recv=4310991600, mid=2993, argc=0, argv=0x0000000000000000, scope=CALL_FCALL, self=4334514640) + 166 at vm_eval.c:296
      	    frame #20: 0x0000000100204827 miniruby`rb_call(recv=4310991600, mid=2993, argc=0, argv=0x0000000000000000, scope=CALL_FCALL) + 84 at vm_eval.c:589
      	    frame #21: 0x000000010020518b miniruby`rb_funcallv(recv=4310991600, mid=2993, argc=0, argv=0x0000000000000000) + 52 at vm_eval.c:815
      	    frame #22: 0x000000010012242e miniruby`mlambda(method=0) + 45 at proc.c:2661
      	    frame #23: 0x0000000100205bac miniruby`rb_iterate0(it_proc=(miniruby`mlambda at proc.c:2660), data1=0, ifunc=0x00000001025b71a8, ec=0x00000001007d3548) + 380 at vm_eval.c:1134
      	    frame #24: 0x0000000100205d16 miniruby`rb_iterate(it_proc=(miniruby`mlambda at proc.c:2660), data1=0, bl_proc=(miniruby`bmcall at proc.c:2666), data2=4334514640) + 88 at vm_eval.c:1166
      	    frame #25: 0x00000001001224c7 miniruby`method_to_proc(method=4334514640) + 43 at proc.c:2701
      	    frame #26: 0x00000001001f24a7 miniruby`call_cfunc_0(func=(miniruby`method_to_proc at proc.c:2688), recv=4334514640, argc=0, argv=0x0000000102400568) + 41 at vm_insnhelper.c:1729
      	    frame #27: 0x00000001001f2f87 miniruby`vm_call_cfunc_with_frame(ec=0x00000001007d3548, reg_cfp=0x0000000102500350, calling=0x00007fff5fbfc030, ci=0x0000000100f2ec70, cc=0x0000000102735718) + 386 at vm_insnhelper.c:1918
      	    frame #28: 0x00000001001f30d6 miniruby`vm_call_cfunc(ec=0x00000001007d3548, reg_cfp=0x0000000102500350, calling=0x00007fff5fbfc030, ci=0x0000000100f2ec70, cc=0x0000000102735718) + 149 at vm_insnhelper.c:1934
      	    frame #29: 0x00000001001f4319 miniruby`vm_call_method_each_type(ec=0x00000001007d3548, cfp=0x0000000102500350, calling=0x00007fff5fbfc030, ci=0x0000000100f2ec70, cc=0x0000000102735718) + 239 at vm_insnhelper.c:2232
      	    frame #30: 0x00000001001f49a4 miniruby`vm_call_method(ec=0x00000001007d3548, cfp=0x0000000102500350, calling=0x00007fff5fbfc030, ci=0x0000000100f2ec70, cc=0x0000000102735718) + 117 at vm_insnhelper.c:2355
      	    frame #31: 0x00000001001f4b7a miniruby`vm_call_general(ec=0x00000001007d3548, reg_cfp=0x0000000102500350, calling=0x00007fff5fbfc030, ci=0x0000000100f2ec70, cc=0x0000000102735718) + 59 at vm_insnhelper.c:2398
      	    frame #32: 0x00000001001faf0e miniruby`vm_exec_core(ec=0x00000001007d3548, initial=0) + 8471 at insns.def:915
      	    frame #33: 0x000000010020b75d miniruby`vm_exec(ec=0x00000001007d3548) + 230 at vm.c:1771
      	    frame #34: 0x000000010020c3d1 miniruby`rb_iseq_eval(iseq=0x00000001007f8270) + 52 at vm.c:2008
      	    frame #35: 0x00000001000caa4a miniruby`rb_load_internal0(ec=0x00000001007d3548, fname=4310799960, wrap=0) + 631 at load.c:611
      	    frame #36: 0x00000001000cab36 miniruby`rb_load_internal(fname=4310799960, wrap=0) + 46 at load.c:642
      	    frame #37: 0x00000001000cae1d miniruby`rb_f_load(argc=1, argv=0x00000001024004b8) + 217 at load.c:710
      	    frame #38: 0x00000001001f247c miniruby`call_cfunc_m1(func=(miniruby`rb_f_load at load.c:695), recv=4311327440, argc=1, argv=0x00000001024004b8) + 47 at vm_insnhelper.c:1723
      	    frame #39: 0x00000001001f2f87 miniruby`vm_call_cfunc_with_frame(ec=0x00000001007d3548, reg_cfp=0x00000001025003e0, calling=0x00007fff5fbfd3e0, ci=0x0000000102541070, cc=0x0000000100f9e918) + 386 at vm_insnhelper.c:1918
      	    frame #40: 0x00000001001f30d6 miniruby`vm_call_cfunc(ec=0x00000001007d3548, reg_cfp=0x00000001025003e0, calling=0x00007fff5fbfd3e0, ci=0x0000000102541070, cc=0x0000000100f9e918) + 149 at vm_insnhelper.c:1934
      	    frame #41: 0x00000001001f4319 miniruby`vm_call_method_each_type(ec=0x00000001007d3548, cfp=0x00000001025003e0, calling=0x00007fff5fbfd3e0, ci=0x0000000102541070, cc=0x0000000100f9e918) + 239 at vm_insnhelper.c:2232
      	    frame #42: 0x00000001001f4a2c miniruby`vm_call_method(ec=0x00000001007d3548, cfp=0x00000001025003e0, calling=0x00007fff5fbfd3e0, ci=0x0000000102541070, cc=0x0000000100f9e918) + 253 at vm_insnhelper.c:2366
      	    frame #43: 0x00000001001f4b7a miniruby`vm_call_general(ec=0x00000001007d3548, reg_cfp=0x00000001025003e0, calling=0x00007fff5fbfd3e0, ci=0x0000000102541070, cc=0x0000000100f9e918) + 59 at vm_insnhelper.c:2398
      	    frame #44: 0x00000001001faf0e miniruby`vm_exec_core(ec=0x00000001007d3548, initial=0) + 8471 at insns.def:915
      	    frame #45: 0x000000010020b75d miniruby`vm_exec(ec=0x00000001007d3548) + 230 at vm.c:1771
      	    frame #46: 0x000000010020c40f miniruby`rb_iseq_eval_main(iseq=0x0000000100f21240) + 52 at vm.c:2019
      	    frame #47: 0x000000010007c774 miniruby`ruby_exec_internal(n=0x0000000100f21240) + 297 at eval.c:246
      	    frame #48: 0x000000010007c89a miniruby`ruby_exec_node(n=0x0000000100f21240) + 36 at eval.c:310
      	    frame #49: 0x000000010007c86d miniruby`ruby_run_node(n=0x0000000100f21240) + 62 at eval.c:302
      	    frame #50: 0x0000000100001399 miniruby`main(argc=9, argv=0x00007fff5fbfdae0) + 113 at main.c:42
      	    frame #51: 0x00007fff88eda5ad libdyld.dylib`start + 1
      	(lldb)
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62941 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      815d4c4e
    • U
      ChangeLog: missed at r62939 · bb0acd36
      usa 提交于
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62940 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      bb0acd36
    • U
      merge revision(s) 61359: [Backport #14208] · 2dee659b
      usa 提交于
      	raise error if value contains CR/LF in iniheader of initialize_http_header
      
      	like r59693, initialize_http_header also should raise error. [Bug #14208]
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62939 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      2dee659b
    • U
      merge revision(s) 61346: [Backport #14206] · 2d0062bc
      usa 提交于
      	parse.y: end of script at newline
      
      	* parse.y (parser_yylex): deal with end of script chars just after
      	  ignored newline as other places.  [ruby-core:84349] [Bug #14206]
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62938 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      2d0062bc
    • U
      merge revision(s) 61278,61281: [Backport #13655] · b24443d3
      usa 提交于
      	IO.new doesn't recive "-" as external_encoding [Bug #13655]
      
      	[DOC] `IO.new` accepts `external_encoding`
      
      	Revert part of r61278 [Bug #13655]
      	[ci skip]
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      b24443d3
  3. 22 3月, 2018 3 次提交
    • U
      merge revision(s) 57081: · 889afb8b
      usa 提交于
      	Removed the obstacle to running test-all with VC14.
      
      	* test/fiddle/test_import.rb (LIBC.fprintf): VC14's `fprintf` is very distinct
      	  name, then, just ignore this test.
      
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62886 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      889afb8b
    • U
      merge https://github.com/ruby/openssl/commit/3af2635f117f8da563d180bc1c58702aecb16e0c · c2fdfb05
      usa 提交于
      	patched by Kazuki Yamaguchi <k@rhe.jp>
      
      	bio: prevent possible GC issue in ossl_obj2bio()
      
      	Prevent the new object created by StringValue() from being GCed.
      	Luckily, as none of the callers of ossl_obj2bio() reads from the
      	returned BIO after possible triggering GC, this has not been a real
      	problem.
      
      	As a bonus, ossl_protect_obj2bio() function which is no longer used
      	anywhere is removed.
      
      	merge https://github.com/ruby/openssl/commit/f842b0d5c5e37527c11954a4b7a98c8d9cc57865
      	patched by Kazuki Yamaguchi <k@rhe.jp>
      
      	bio: do not use the FILE BIO method in ossl_obj2bio()
      
      	Read everything from an IO object into a String first and use the
      	memory buffer BIO method just as we do for String inputs.
      
      	For MSVC builds, the FILE BIO method uses the "UPLINK" interface that
      	requires the application to provide OPENSSL_Applink() function. For us,
      	the "application" means ruby.exe, in which we can't do anything. As a
      	workaround, avoid using the FILE BIO method at all.
      
      	Usually private keys or X.509 certificates aren't that large and the
      	temporarily increased memory usage hopefully won't be an issue.
      
      	ext/openssl/ossl_version.h (OpenSSL::VERSION): bump to 1.1.1.
      
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62885 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      c2fdfb05
    • U
      merge revision(s) 54737,54740,55792: [Backport #14623] · 85ddcb93
      usa 提交于
      	Support MSVC14 and 15 [Bug #11118]
      
      	Search _pioinfo which is not exported after MSVC14.
      	[Bug #12014] [GH-884]
      
      	win32.c: suppress warnings
      
      	* win32/win32.c (set_pioinfo_extra): remove "/*" within comment.
      	* win32/win32.c (set_pioinfo_extra): use more reliable way to search
      	  the position of pioinfo of VC14, and also support debug library of it.
      	  patched by davispuh AT gmail.com
      	  [ruby-core:76644] [Bug #12644]
      	  this fixes also [Bug #12631]
      
      
      git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62884 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
      85ddcb93
  4. 20 3月, 2018 1 次提交
  5. 18 3月, 2018 10 次提交