mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
merge revision(s) 51263,51264: [Backport #11352]
* vm.c (m_core_hash_merge_ptr): copy the arguments to the machine stack before rewinding the control frame pointer and leaving the arguments outside valid region of the value stack. [ruby-core:69969] [Bug #11352] * vm.c (REWIND_CFP): keep the arguments region inside the valid value stack. [ruby-core:69969] [Bug #11352] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_2@51521 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
00d499992b
commit
e49c2e3569
4 changed files with 31 additions and 2 deletions
10
ChangeLog
10
ChangeLog
|
|
@ -1,3 +1,13 @@
|
|||
Tue Aug 11 01:21:49 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* vm.c (m_core_hash_merge_ptr): copy the arguments to the machine
|
||||
stack before rewinding the control frame pointer and leaving the
|
||||
arguments outside valid region of the value stack.
|
||||
[ruby-core:69969] [Bug #11352]
|
||||
|
||||
* vm.c (REWIND_CFP): keep the arguments region inside the valid
|
||||
value stack. [ruby-core:69969] [Bug #11352]
|
||||
|
||||
Tue Aug 11 01:11:02 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* string.c (rb_str_reverse): reversed string is not a substring,
|
||||
|
|
|
|||
|
|
@ -192,7 +192,9 @@ class TestRubyLiteral < Test::Unit::TestCase
|
|||
assert_normal_exit %q{GC.disable=true; x = nil; raise if eval("[#{(1..1_000_000).to_a.join(", ")}]").size != 1_000_000}, "", timeout: 300, child_env: %[--disable-gems]
|
||||
assert_normal_exit %q{GC.disable=true; x = nil; raise if eval("{#{(1..1_000_000).map{|n| "#{n} => x"}.join(', ')}}").size != 1_000_000}, "", timeout: 300, child_env: %[--disable-gems]
|
||||
assert_normal_exit %q{GC.disable=true; x = nil; raise if eval("{#{(1..1_000_000).map{|n| "#{n} => #{n}"}.join(', ')}}").size != 1_000_000}, "", timeout: 300, child_env: %[--disable-gems]
|
||||
end
|
||||
|
||||
def test_big_hash_literal
|
||||
bug7466 = '[ruby-dev:46658]'
|
||||
h = {
|
||||
0xFE042 => 0xE5CD,
|
||||
|
|
@ -327,6 +329,19 @@ class TestRubyLiteral < Test::Unit::TestCase
|
|||
}
|
||||
k = h.keys
|
||||
assert_equal([129, 0xFE331], [k.size, k.last], bug7466)
|
||||
|
||||
code = [
|
||||
"h = {",
|
||||
(1..128).map {|i| "#{i} => 0,"},
|
||||
(129..140).map {|i| "#{i} => [],"},
|
||||
"}",
|
||||
].join
|
||||
assert_separately([], <<-"end;")
|
||||
GC.stress = true
|
||||
#{code}
|
||||
GC.stress = false
|
||||
assert_equal(140, h.size)
|
||||
end;
|
||||
end
|
||||
|
||||
def test_range
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#define RUBY_VERSION "2.2.3"
|
||||
#define RUBY_RELEASE_DATE "2015-08-11"
|
||||
#define RUBY_PATCHLEVEL 153
|
||||
#define RUBY_PATCHLEVEL 154
|
||||
|
||||
#define RUBY_RELEASE_YEAR 2015
|
||||
#define RUBY_RELEASE_MONTH 8
|
||||
|
|
|
|||
6
vm.c
6
vm.c
|
|
@ -2267,7 +2267,11 @@ vm_define_method(rb_thread_t *th, VALUE obj, ID id, VALUE iseqval,
|
|||
|
||||
#define REWIND_CFP(expr) do { \
|
||||
rb_thread_t *th__ = GET_THREAD(); \
|
||||
th__->cfp++; expr; th__->cfp--; \
|
||||
VALUE *const curr_sp = (th__->cfp++)->sp; \
|
||||
VALUE *const saved_sp = th__->cfp->sp; \
|
||||
th__->cfp->sp = curr_sp; \
|
||||
expr; \
|
||||
(th__->cfp--)->sp = saved_sp; \
|
||||
} while (0)
|
||||
|
||||
static VALUE
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue