<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ruby.git/test/-ext-, branch ruby_2_5</title>
<subtitle>The Ruby Programming Language</subtitle>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/'/>
<entry>
<title>merge revision(s) 3f9562015e651735bfc2fdd14e8f6963b673e22a,c06ddfee878524168e4af07443217ed2f8d0954b,3b3b4a44e5: [Backport #15792]</title>
<updated>2019-08-26T15:58:57+00:00</updated>
<author>
<name>usa</name>
<email>usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2019-08-26T15:58:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=689a6a0a763517e5fa1fc078b2f8130e0af7c4c0'/>
<id>689a6a0a763517e5fa1fc078b2f8130e0af7c4c0</id>
<content type='text'>
	Get rid of indirect sharing

	* string.c (str_duplicate): share the root shared string if the
	  original string is already sharing, so that all shared strings
	  refer the root shared string directly.  indirect sharing can
	  cause a dangling pointer.

	[Bug #15792]

	str_duplicate: Don't share with a frozen shared string

	This is a follow up for 3f9562015e651735bfc2fdd14e8f6963b673e22a.
	Before this commit, it was possible to create a shared string which
	shares with another shared string by passing a frozen shared string
	to `str_duplicate`.

	Such string looks like:

	```
	 --------                    -----------------
	 | root | ------ owns -----&gt; | root's buffer |
	 --------                    -----------------
	     ^                             ^   ^
	 -----------                       |   |
	 | shared1 | ------ references -----   |
	 -----------                           |
	     ^                                 |
	 -----------                           |
	 | shared2 | ------ references ---------
	 -----------
	```

	This is bad news because `rb_fstring(shared2)` can make `shared1`
	independent, which severs the reference from `shared1` to `root`:

	```c
	/* from fstr_update_callback() */
	str = str_new_frozen(rb_cString, shared2);  /* can return shared1 */
	if (STR_SHARED_P(str)) { /* shared1 is also a shared string */
	    str_make_independent(str);  /* no frozen check */
	}
	```

	If `shared1` was the only reference to `root`, then `root` can be
	reclaimed by the GC, leaving `shared2` in a corrupted state:

	```
	 -----------                         --------------------
	 | shared1 | -------- owns --------&gt; | shared1's buffer |
	 -----------                         --------------------
	      ^
	      |
	 -----------                         -------------------------
	 | shared2 | ------ references ----&gt; | root's buffer (freed) |
	 -----------                         -------------------------
	```

	Here is a reproduction script for the situation this commit fixes.

	```ruby
	a = ('a' * 24).strip.freeze.strip
	-a
	p a
	4.times { GC.start }
	p a
	```

	 - string.c (str_duplicate): always share with the root string when
	   the original is a shared string.
	 - test_rb_str_dup.rb: specifically test `rb_str_dup` to make
	   sure it does not try to share with a shared string.

	[Bug #15792]

	Closes: https://github.com/ruby/ruby/pull/2159

	Update dependencies


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@67766 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	Get rid of indirect sharing

	* string.c (str_duplicate): share the root shared string if the
	  original string is already sharing, so that all shared strings
	  refer the root shared string directly.  indirect sharing can
	  cause a dangling pointer.

	[Bug #15792]

	str_duplicate: Don't share with a frozen shared string

	This is a follow up for 3f9562015e651735bfc2fdd14e8f6963b673e22a.
	Before this commit, it was possible to create a shared string which
	shares with another shared string by passing a frozen shared string
	to `str_duplicate`.

	Such string looks like:

	```
	 --------                    -----------------
	 | root | ------ owns -----&gt; | root's buffer |
	 --------                    -----------------
	     ^                             ^   ^
	 -----------                       |   |
	 | shared1 | ------ references -----   |
	 -----------                           |
	     ^                                 |
	 -----------                           |
	 | shared2 | ------ references ---------
	 -----------
	```

	This is bad news because `rb_fstring(shared2)` can make `shared1`
	independent, which severs the reference from `shared1` to `root`:

	```c
	/* from fstr_update_callback() */
	str = str_new_frozen(rb_cString, shared2);  /* can return shared1 */
	if (STR_SHARED_P(str)) { /* shared1 is also a shared string */
	    str_make_independent(str);  /* no frozen check */
	}
	```

	If `shared1` was the only reference to `root`, then `root` can be
	reclaimed by the GC, leaving `shared2` in a corrupted state:

	```
	 -----------                         --------------------
	 | shared1 | -------- owns --------&gt; | shared1's buffer |
	 -----------                         --------------------
	      ^
	      |
	 -----------                         -------------------------
	 | shared2 | ------ references ----&gt; | root's buffer (freed) |
	 -----------                         -------------------------
	```

	Here is a reproduction script for the situation this commit fixes.

	```ruby
	a = ('a' * 24).strip.freeze.strip
	-a
	p a
	4.times { GC.start }
	p a
	```

	 - string.c (str_duplicate): always share with the root string when
	   the original is a shared string.
	 - test_rb_str_dup.rb: specifically test `rb_str_dup` to make
	   sure it does not try to share with a shared string.

	[Bug #15792]

	Closes: https://github.com/ruby/ruby/pull/2159

	Update dependencies


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@67766 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>merge revision(s) 67203: [Backport #15651]</title>
<updated>2019-03-11T12:51:59+00:00</updated>
<author>
<name>nagachika</name>
<email>nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2019-03-11T12:51:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=d704a0fe3fafe1028fe57618d19a6de35b08cbf9'/>
<id>d704a0fe3fafe1028fe57618d19a6de35b08cbf9</id>
<content type='text'>
	numeric.c: fix infinite loop

	* numeric.c (int_pow): fix infinite loop in the case of y equal 1
	  and power of x does not overflow.
	  [ruby-core:91734] [Bug #15651]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@67219 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	numeric.c: fix infinite loop

	* numeric.c (int_pow): fix infinite loop in the case of y equal 1
	  and power of x does not overflow.
	  [ruby-core:91734] [Bug #15651]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@67219 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>merge revision(s) 64799,64800,64801: [Backport #15105]</title>
<updated>2018-11-28T13:55:17+00:00</updated>
<author>
<name>nagachika</name>
<email>nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2018-11-28T13:55:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=e84f80761840000dd84ecd30d97946832e44dd97'/>
<id>e84f80761840000dd84ecd30d97946832e44dd97</id>
<content type='text'>
	fix typo.

	* vm_exec.h (DEBUG_END_INSN()): use `ec` instead of `th`.
	  This macro is used when `VMDEBUG &gt; 0`.


	escape all env properly.

	* vm_backtrace.c (rb_debug_inspector_open): escape all env using
	  `rb_vm_stack_to_heap()` before making bindings.
	  [Bug #15105]

	  There is a complicated story of this issue:
	  Without this patch, IFUNC frame does not escaped. A IFUNC frame
	  points to CFUNC ep as previous ep. However, CFUNC ep can be escaped
	  because of making bindings of Ruby level frames.
	  IFUNC's ep can points to invalidated ep and `rb_iter_break()` will
	  fail. This is why `any?` fails.

	* test/-ext-/debug/test_debug.rb: add a test.


	* remove trailing spaces.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@66074 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	fix typo.

	* vm_exec.h (DEBUG_END_INSN()): use `ec` instead of `th`.
	  This macro is used when `VMDEBUG &gt; 0`.


	escape all env properly.

	* vm_backtrace.c (rb_debug_inspector_open): escape all env using
	  `rb_vm_stack_to_heap()` before making bindings.
	  [Bug #15105]

	  There is a complicated story of this issue:
	  Without this patch, IFUNC frame does not escaped. A IFUNC frame
	  points to CFUNC ep as previous ep. However, CFUNC ep can be escaped
	  because of making bindings of Ruby level frames.
	  IFUNC's ep can points to invalidated ep and `rb_iter_break()` will
	  fail. This is why `any?` fails.

	* test/-ext-/debug/test_debug.rb: add a test.


	* remove trailing spaces.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@66074 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>merge revision(s) 62116,62151: [Backport #14425]</title>
<updated>2018-02-20T20:11:47+00:00</updated>
<author>
<name>naruse</name>
<email>naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2018-02-20T20:11:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=18b6b67233a923b53d46533f8fa5db05e7b2fe71'/>
<id>18b6b67233a923b53d46533f8fa5db05e7b2fe71</id>
<content type='text'>
	ruby.h: relax rb_funcall check on extra args for clang

	clang 5.+ (tested clang 7.0.0) seems to be attempting division-by-zero
	and giving a very large number for static args to rb_funcall.

	* include/ruby/ruby.h (rb_varargs_bad_length): relax check for clang
	* ext/-test-/funcall/funcall.c: renamed from passing_block.c
	  define extra_args_name function
	* test/-ext-/funcall/test_funcall.rb: new test
	  [ruby-core:85266] [Bug #14425]

	From: Eric Wong &lt;e@80x24.org&gt;

	ruby.h: relax rb_funcall(obj, id, 0, 0) case only

	* include/ruby/ruby.h (rb_varargs_argc_valid_p): relax rb_funcall
	  check on extra args only if argc == 0, for the compatibility
	  with wrong code which is probably confused with rb_funcallv.
	  [Bug #14425]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@62501 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	ruby.h: relax rb_funcall check on extra args for clang

	clang 5.+ (tested clang 7.0.0) seems to be attempting division-by-zero
	and giving a very large number for static args to rb_funcall.

	* include/ruby/ruby.h (rb_varargs_bad_length): relax check for clang
	* ext/-test-/funcall/funcall.c: renamed from passing_block.c
	  define extra_args_name function
	* test/-ext-/funcall/test_funcall.rb: new test
	  [ruby-core:85266] [Bug #14425]

	From: Eric Wong &lt;e@80x24.org&gt;

	ruby.h: relax rb_funcall(obj, id, 0, 0) case only

	* include/ruby/ruby.h (rb_varargs_argc_valid_p): relax rb_funcall
	  check on extra args only if argc == 0, for the compatibility
	  with wrong code which is probably confused with rb_funcallv.
	  [Bug #14425]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@62501 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix test-all tests to avoid creating report_on_exception warnings</title>
<updated>2017-12-12T18:44:49+00:00</updated>
<author>
<name>eregon</name>
<email>eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2017-12-12T18:44:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=15689ed7780b06ddc14cde4f427de834177283a5'/>
<id>15689ed7780b06ddc14cde4f427de834177283a5</id>
<content type='text'>
* The warnings are shown by Thread.report_on_exception defaulting to
  true. [Feature #14143] [ruby-core:83979]
* Improves tests by narrowing down the scope where an exception
  is expected.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61188 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* The warnings are shown by Thread.report_on_exception defaulting to
  true. [Feature #14143] [ruby-core:83979]
* Improves tests by narrowing down the scope where an exception
  is expected.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61188 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>Add FrozenError as a subclass of RuntimeError</title>
<updated>2017-12-12T00:46:34+00:00</updated>
<author>
<name>shyouhei</name>
<email>shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2017-12-12T00:46:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=b57915eddc91ce0369ae8bcf82d8c4364f42ea05'/>
<id>b57915eddc91ce0369ae8bcf82d8c4364f42ea05</id>
<content type='text'>
FrozenError will be used instead of RuntimeError for exceptions
raised when there is an attempt to modify a frozen object. The
reason for this change is to differentiate exceptions related
to frozen objects from generic exceptions such as those generated
by Kernel#raise without an exception class.

From: Jeremy Evans &lt;code@jeremyevans.net&gt;
Signed-off-by: Urabe Shyouhei &lt;shyouhei@ruby-lang.org&gt;


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61131 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
FrozenError will be used instead of RuntimeError for exceptions
raised when there is an attempt to modify a frozen object. The
reason for this change is to differentiate exceptions related
to frozen objects from generic exceptions such as those generated
by Kernel#raise without an exception class.

From: Jeremy Evans &lt;code@jeremyevans.net&gt;
Signed-off-by: Urabe Shyouhei &lt;shyouhei@ruby-lang.org&gt;


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61131 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>Add test for Bug::String.buf_new</title>
<updated>2017-12-03T12:06:16+00:00</updated>
<author>
<name>naruse</name>
<email>naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2017-12-03T12:06:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=7a96d788dc0be2efc26ece2dec9221257339e677'/>
<id>7a96d788dc0be2efc26ece2dec9221257339e677</id>
<content type='text'>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60993 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60993 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>string.c: fix rb_external_str_new_with_enc</title>
<updated>2017-12-02T07:09:16+00:00</updated>
<author>
<name>nobu</name>
<email>nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2017-12-02T07:09:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=a1692f7fdf62dc109886d9910b4dcca635dc2e25'/>
<id>a1692f7fdf62dc109886d9910b4dcca635dc2e25</id>
<content type='text'>
* string.c (rb_external_str_new_with_enc): do not search non-ascii
  by NULL pointer.  [ruby-core:84055] [Bug #14150]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* string.c (rb_external_str_new_with_enc): do not search non-ascii
  by NULL pointer.  [ruby-core:84055] [Bug #14150]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed misspelling words.</title>
<updated>2017-10-22T11:27:06+00:00</updated>
<author>
<name>hsbt</name>
<email>hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2017-10-22T11:27:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=6693e3e7230ca64b01ffb24d2693af1c77bd2998'/>
<id>6693e3e7230ca64b01ffb24d2693af1c77bd2998</id>
<content type='text'>
  These are detected by https://github.com/client9/misspell

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60359 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
  These are detected by https://github.com/client9/misspell

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60359 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove unnecessary `require 'thread'`</title>
<updated>2017-10-08T07:00:01+00:00</updated>
<author>
<name>kazu</name>
<email>kazu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2017-10-08T07:00:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=6064132c42ffe99e9a0d3a6ba80a7932c6f7903d'/>
<id>6064132c42ffe99e9a0d3a6ba80a7932c6f7903d</id>
<content type='text'>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60139 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60139 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
</feed>
