From 2c9cf6b1987d5d8e161e1bf96de1f9f175a58f09 Mon Sep 17 00:00:00 2001 From: naruse Date: Mon, 24 Feb 2014 06:04:59 +0000 Subject: [PATCH 01/22] merge revision(s) 44425,44460: [Backport #9320] * tool/make-snapshot: support new version scheme. * tool/make-snapshot: needs CXXFLAGS. [ruby-core:59393][Bug #9320] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45162 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 8 ++++++++ tool/make-snapshot | 31 ++++++++++++++++++++++++------- version.h | 2 +- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index def33cbe32aab1..8f929ba566c134 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Mon Feb 24 14:56:41 2014 WATANABE Hirofumi + + * tool/make-snapshot: needs CXXFLAGS. [ruby-core:59393][Bug #9320] + +Mon Feb 24 14:56:41 2014 NAKAMURA Usaku + + * tool/make-snapshot: support new version scheme. + Mon Feb 24 13:05:48 2014 Aaron Patterson * ext/psych/lib/psych.rb: New release of psych. diff --git a/tool/make-snapshot b/tool/make-snapshot index 962ac07d9d9196..68ffd3b2fc3422 100755 --- a/tool/make-snapshot +++ b/tool/make-snapshot @@ -116,8 +116,14 @@ def package(rev, destdir) patchlevel = true tag = "p#{$4}" url = SVNURL + "tags/v#{$1}_#{$2}_#{$3}_#{$4}" - when /\./ - url = SVNURL + "branches/ruby_#{rev.tr('.', '_')}" + when /\A(\d+)\.(\d+)\.(\d+)\z/ + if $1 > "2" || $1 == "2" && $2 >= "1" + patchlevel = true + tag = "" + url = SVNURL + "tags/v#{$1}_#{$2}_#{$3}" + else + url = SVNURL + "branches/ruby_#{rev.tr('.', '_')}" + end else warn "#{$0}: unknown version - #{rev}" return @@ -160,14 +166,20 @@ def package(rev, destdir) version ||= (versionhdr = IO.read("#{v}/version.h"))[RUBY_VERSION_PATTERN, 1] version or return if patchlevel - versionhdr ||= IO.read("#{v}/version.h") - patchlevel = versionhdr[/^\#define\s+RUBY_PATCHLEVEL\s+(\d+)/, 1] - tag = (patchlevel ? "p#{patchlevel}" : "r#{revision}") + unless tag.empty? + versionhdr ||= IO.read("#{v}/version.h") + patchlevel = versionhdr[/^\#define\s+RUBY_PATCHLEVEL\s+(\d+)/, 1] + tag = (patchlevel ? "p#{patchlevel}" : "r#{revision}") + end else tag ||= "r#{revision}" end unless v == $exported - n = "ruby-#{version}-#{tag}" + if tag.empty? + n = "ruby-#{version}" + else + n = "ruby-#{version}-#{tag}" + end File.directory?(n) or File.rename v, n v = n end @@ -177,7 +189,11 @@ def package(rev, destdir) Dir.chdir(v) do %w[config.guess config.sub].each do |conf| next if File.exist?("tool/#{conf}") - require File.expand_path("config_files", $tooldir) + begin + require File.expand_path("config_files", $tooldir) + rescue LoadError + abort "Error!!! Copy 'config_files.rb' from 'tool' directory of the recent ruby repository!" + end ConfigFiles.download(conf, "tool") end File.open(clean.add("cross.rb"), "w") do |f| @@ -205,6 +221,7 @@ def package(rev, destdir) f.puts "s,@ARCH_FLAG@,|#_!!_#|,g" f.puts "s,@CFLAGS@,|#_!!_#|,g" f.puts "s,@CPPFLAGS@,|#_!!_#|,g" + f.puts "s,@CXXFLAGS@,|#_!!_#|,g" f.puts "s,@LDFLAGS@,|#_!!_#|,g" f.puts "s,@DLDFLAGS@,|#_!!_#|,g" f.puts "s,@LIBEXT@,|#_!!_#|a,g" diff --git a/version.h b/version.h index f309464de276e4..3931597cac075a 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.1" #define RUBY_RELEASE_DATE "2014-02-24" -#define RUBY_PATCHLEVEL 76 +#define RUBY_PATCHLEVEL 77 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 2 From ba39ed74a3098f7045668b117d0486b8e8ee8669 Mon Sep 17 00:00:00 2001 From: naruse Date: Mon, 24 Feb 2014 06:33:54 +0000 Subject: [PATCH 02/22] bump version to 2.1.2 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45163 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.h b/version.h index 3931597cac075a..dfd09b9312fd61 100644 --- a/version.h +++ b/version.h @@ -1,4 +1,4 @@ -#define RUBY_VERSION "2.1.1" +#define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-02-24" #define RUBY_PATCHLEVEL 77 From 3b12b75e87412762ad4bb2a51b5e4a81d2982979 Mon Sep 17 00:00:00 2001 From: naruse Date: Sat, 1 Mar 2014 08:25:29 +0000 Subject: [PATCH 03/22] merge revision(s) 44433: [Backport #9299] * proc.c: Having any mandatory keyword argument increases min arity [#9299] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45226 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ proc.c | 2 +- test/ruby/test_proc.rb | 5 +++++ version.h | 8 ++++---- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8f929ba566c134..f2592eb9f6ca2f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Mar 1 17:25:12 2014 Marc-Andre Lafortune + + * proc.c: Having any mandatory keyword argument increases min arity + [#9299] + Mon Feb 24 14:56:41 2014 WATANABE Hirofumi * tool/make-snapshot: needs CXXFLAGS. [ruby-core:59393][Bug #9320] diff --git a/proc.c b/proc.c index 78851ac54749f1..9c88ada316ca1e 100644 --- a/proc.c +++ b/proc.c @@ -828,7 +828,7 @@ rb_iseq_min_max_arity(const rb_iseq_t *iseq, int *max) *max = (iseq->arg_rest == -1 && iseq->arg_keyword == -1) ? iseq->argc + iseq->arg_post_len + iseq->arg_opts - (iseq->arg_opts > 0) : UNLIMITED_ARGUMENTS; - return iseq->argc + iseq->arg_post_len; + return iseq->argc + iseq->arg_post_len + (iseq->arg_keyword_required > 0); } static int diff --git a/test/ruby/test_proc.rb b/test/ruby/test_proc.rb index 206e21fb1a8bfd..9e8fb06d6dc942 100644 --- a/test/ruby/test_proc.rb +++ b/test/ruby/test_proc.rb @@ -85,6 +85,11 @@ def test_arity assert_equal(-3, proc{|x, y=0, z, **o|}.arity) assert_equal(-3, proc{|x, y=0, *z, w, **o|}.arity) + assert_equal(2, proc{|x, y=0, z, a:1|}.arity) + assert_equal(3, proc{|x, y=0, z, a:|}.arity) + assert_equal(-4, proc{|x, y, *rest, a:, b:, c:|}.arity) + assert_equal(3, proc{|x, y=0, z, a:, **o|}.arity) + assert_equal(0, lambda{}.arity) assert_equal(0, lambda{||}.arity) assert_equal(1, lambda{|x|}.arity) diff --git a/version.h b/version.h index dfd09b9312fd61..8c8f90068871d2 100644 --- a/version.h +++ b/version.h @@ -1,10 +1,10 @@ #define RUBY_VERSION "2.1.2" -#define RUBY_RELEASE_DATE "2014-02-24" -#define RUBY_PATCHLEVEL 77 +#define RUBY_RELEASE_DATE "2014-03-01" +#define RUBY_PATCHLEVEL 78 #define RUBY_RELEASE_YEAR 2014 -#define RUBY_RELEASE_MONTH 2 -#define RUBY_RELEASE_DAY 24 +#define RUBY_RELEASE_MONTH 3 +#define RUBY_RELEASE_DAY 1 #include "ruby/version.h" From d5c45b5fb11748acbfc9ee6c7dbfeb04408de53d Mon Sep 17 00:00:00 2001 From: naruse Date: Sat, 1 Mar 2014 09:02:36 +0000 Subject: [PATCH 04/22] merge revision(s) 44370: [Backport #9576] hash.c: extra states * hash.c (rb_hash_reject): use words "extra states". git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45227 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- hash.c | 2 +- version.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hash.c b/hash.c index 66cd94bcddc96e..9a5814aad48b0e 100644 --- a/hash.c +++ b/hash.c @@ -1178,7 +1178,7 @@ rb_hash_reject(VALUE hash) #endif } } -#if HASH_REJECT_COPY_MISC_ATTRIBUTES +#if HASH_REJECT_COPY_EXTRA_STATES result = rb_hash_dup_empty(hash); #else result = rb_hash_new(); diff --git a/version.h b/version.h index 8c8f90068871d2..59c80e38280fb2 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-03-01" -#define RUBY_PATCHLEVEL 78 +#define RUBY_PATCHLEVEL 79 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 3 From 3159b648e19bcdcb5be5f54cf6f097d7d51d9af3 Mon Sep 17 00:00:00 2001 From: naruse Date: Sat, 1 Mar 2014 12:01:29 +0000 Subject: [PATCH 05/22] merge revision(s) 44432: [Backport #9299] * proc.c: Having optional keyword arguments makes maximum arity +1, not unlimited [#8072] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45231 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ proc.c | 5 +++-- test/ruby/test_proc.rb | 12 ++++++------ version.h | 2 +- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index f2592eb9f6ca2f..819c6fe4f2a2b1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Mar 1 21:00:27 2014 Marc-Andre Lafortune + + * proc.c: Having optional keyword arguments makes maximum arity +1, + not unlimited [#8072] + Sat Mar 1 17:25:12 2014 Marc-Andre Lafortune * proc.c: Having any mandatory keyword argument increases min arity diff --git a/proc.c b/proc.c index 9c88ada316ca1e..e3cecb7bbe898a 100644 --- a/proc.c +++ b/proc.c @@ -825,8 +825,9 @@ proc_arity(VALUE self) static inline int rb_iseq_min_max_arity(const rb_iseq_t *iseq, int *max) { - *max = (iseq->arg_rest == -1 && iseq->arg_keyword == -1) ? - iseq->argc + iseq->arg_post_len + iseq->arg_opts - (iseq->arg_opts > 0) + *max = iseq->arg_rest == -1 ? + iseq->argc + iseq->arg_post_len + iseq->arg_opts - + (iseq->arg_opts > 0) + (iseq->arg_keyword != -1) : UNLIMITED_ARGUMENTS; return iseq->argc + iseq->arg_post_len + (iseq->arg_keyword_required > 0); } diff --git a/test/ruby/test_proc.rb b/test/ruby/test_proc.rb index 9e8fb06d6dc942..1c8a053cca84fe 100644 --- a/test/ruby/test_proc.rb +++ b/test/ruby/test_proc.rb @@ -77,12 +77,12 @@ def test_arity assert_equal(2, proc{|(x, y), z|[x,y]}.arity) assert_equal(1, proc{|(x, y), z=0|[x,y]}.arity) assert_equal(-4, proc{|x, *y, z, a|}.arity) - assert_equal(-1, proc{|**|}.arity) - assert_equal(-1, proc{|**o|}.arity) - assert_equal(-2, proc{|x, **o|}.arity) - assert_equal(-1, proc{|x=0, **o|}.arity) - assert_equal(-2, proc{|x, y=0, **o|}.arity) - assert_equal(-3, proc{|x, y=0, z, **o|}.arity) + assert_equal(0, proc{|**|}.arity) + assert_equal(0, proc{|**o|}.arity) + assert_equal(1, proc{|x, **o|}.arity) + assert_equal(0, proc{|x=0, **o|}.arity) + assert_equal(1, proc{|x, y=0, **o|}.arity) + assert_equal(2, proc{|x, y=0, z, **o|}.arity) assert_equal(-3, proc{|x, y=0, *z, w, **o|}.arity) assert_equal(2, proc{|x, y=0, z, a:1|}.arity) diff --git a/version.h b/version.h index 59c80e38280fb2..746643bda1c329 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-03-01" -#define RUBY_PATCHLEVEL 79 +#define RUBY_PATCHLEVEL 80 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 3 From ccbe6f31df6434823d9d48db7a0c4d3bcc0e3262 Mon Sep 17 00:00:00 2001 From: nagachika Date: Thu, 1 May 2014 11:55:03 +0000 Subject: [PATCH 06/22] merge revision(s) r45225,r45240,r45488: [Backport #9578] [Backport #9630] * ext/readline/readline.c (Init_readline): Use rl_hook_func_t instead of Function to support readline-6.3. (rl_hook_func_t is available since readline-4.2.) Reported by Dmitry Medvinsky. [ruby-core:61141] [Bug #9578] * ext/readline/extconf.rb (rl_hook_func_t): define as Function for very old readline versions. [ruby-core:61209] [Bug #9578] * ext/readline/extconf.rb: fix typo, `$defs` not `$DEFS`. [ruby-core:61756] [Bug #9578] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45772 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 17 +++++++++++++++++ ext/readline/extconf.rb | 8 ++++++++ ext/readline/readline.c | 2 +- version.h | 6 +++--- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 819c6fe4f2a2b1..c30826342065fc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +Thu May 1 20:47:08 2014 Nobuyoshi Nakada + + * ext/readline/extconf.rb: fix typo, `$defs` not `$DEFS`. + [ruby-core:61756] [Bug #9578] + +Thu May 1 20:47:08 2014 Nobuyoshi Nakada + + * ext/readline/extconf.rb (rl_hook_func_t): define as Function for + very old readline versions. [ruby-core:61209] [Bug #9578] + +Thu May 1 20:47:08 2014 Tanaka Akira + + * ext/readline/readline.c (Init_readline): Use rl_hook_func_t instead + of Function to support readline-6.3. (rl_hook_func_t is available + since readline-4.2.) + Reported by Dmitry Medvinsky. [ruby-core:61141] [Bug #9578] + Sat Mar 1 21:00:27 2014 Marc-Andre Lafortune * proc.c: Having optional keyword arguments makes maximum arity +1, diff --git a/ext/readline/extconf.rb b/ext/readline/extconf.rb index 0b121c1ebe3be8..0477a513c7e028 100644 --- a/ext/readline/extconf.rb +++ b/ext/readline/extconf.rb @@ -19,6 +19,10 @@ def readline.have_func(func) return super(func, headers) end +def readline.have_type(type) + return super(type, headers) +end + dir_config('curses') dir_config('ncurses') dir_config('termcap') @@ -94,4 +98,8 @@ def readline.have_func(func) readline.have_func("rl_redisplay") readline.have_func("rl_insert_text") readline.have_func("rl_delete_text") +unless readline.have_type("rl_hook_func_t") + $defs << "-Drl_hook_func_t=Function" +end + create_makefile("readline") diff --git a/ext/readline/readline.c b/ext/readline/readline.c index 820c6b74bea201..da3b10939c97f3 100644 --- a/ext/readline/readline.c +++ b/ext/readline/readline.c @@ -1974,7 +1974,7 @@ Init_readline() rl_attempted_completion_function = readline_attempted_completion_function; #if defined(HAVE_RL_PRE_INPUT_HOOK) - rl_pre_input_hook = (Function *)readline_pre_input_hook; + rl_pre_input_hook = (rl_hook_func_t *)readline_pre_input_hook; #endif #ifdef HAVE_RL_CATCH_SIGNALS rl_catch_signals = 0; diff --git a/version.h b/version.h index 746643bda1c329..93f816fbee4362 100644 --- a/version.h +++ b/version.h @@ -1,9 +1,9 @@ #define RUBY_VERSION "2.1.2" -#define RUBY_RELEASE_DATE "2014-03-01" -#define RUBY_PATCHLEVEL 80 +#define RUBY_RELEASE_DATE "2014-05-01" +#define RUBY_PATCHLEVEL 81 #define RUBY_RELEASE_YEAR 2014 -#define RUBY_RELEASE_MONTH 3 +#define RUBY_RELEASE_MONTH 5 #define RUBY_RELEASE_DAY 1 #include "ruby/version.h" From fa375ea360e0a4a69ab7d5e4a679dc0fbcce7625 Mon Sep 17 00:00:00 2001 From: nagachika Date: Thu, 1 May 2014 11:59:37 +0000 Subject: [PATCH 07/22] merge revision(s) r45518: [Backport #9578] [Backport #9630] [Backport #9702] * ext/readline/extconf.rb (rl_hook_func_t): check pointer type. [ruby-dev:48089] [Bug #9702] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45773 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ ext/readline/extconf.rb | 2 +- version.h | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index c30826342065fc..cee32095caa3f7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu May 1 20:56:56 2014 Nobuyoshi Nakada + + * ext/readline/extconf.rb (rl_hook_func_t): check pointer type. + [ruby-dev:48089] [Bug #9702] + Thu May 1 20:47:08 2014 Nobuyoshi Nakada * ext/readline/extconf.rb: fix typo, `$defs` not `$DEFS`. diff --git a/ext/readline/extconf.rb b/ext/readline/extconf.rb index 0477a513c7e028..8c3bffc26e23be 100644 --- a/ext/readline/extconf.rb +++ b/ext/readline/extconf.rb @@ -98,7 +98,7 @@ def readline.have_type(type) readline.have_func("rl_redisplay") readline.have_func("rl_insert_text") readline.have_func("rl_delete_text") -unless readline.have_type("rl_hook_func_t") +unless readline.have_type("rl_hook_func_t*") $defs << "-Drl_hook_func_t=Function" end diff --git a/version.h b/version.h index 93f816fbee4362..b033e58c7a0000 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-05-01" -#define RUBY_PATCHLEVEL 81 +#define RUBY_PATCHLEVEL 82 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 From 7afd1c5f33629325f22b512d3094d9cca4a9312c Mon Sep 17 00:00:00 2001 From: nagachika Date: Thu, 1 May 2014 15:23:08 +0000 Subject: [PATCH 08/22] merge revision(s) r45271: [Backport #9592] [Backport #9671] * ext/openssl/ossl.c (ossl_make_error): check NULL for unknown error reasons with old OpenSSL, and insert a colon iff formatted message is not empty. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45778 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ ext/openssl/ossl.c | 5 +++-- version.h | 6 +++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index cee32095caa3f7..b03e17ebb4a31d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Fri May 2 00:19:36 2014 Nobuyoshi Nakada + + * ext/openssl/ossl.c (ossl_make_error): check NULL for unknown + error reasons with old OpenSSL, and insert a colon iff formatted + message is not empty. + Thu May 1 20:56:56 2014 Nobuyoshi Nakada * ext/readline/extconf.rb (rl_hook_func_t): check pointer type. diff --git a/ext/openssl/ossl.c b/ext/openssl/ossl.c index 3961d3ea33424c..50f1db7cf790c6 100644 --- a/ext/openssl/ossl.c +++ b/ext/openssl/ossl.c @@ -311,10 +311,11 @@ ossl_make_error(VALUE exc, const char *fmt, va_list args) else msg = ERR_reason_error_string(e); if (NIL_P(str)) { - str = rb_str_new_cstr(msg); + if (msg) str = rb_str_new_cstr(msg); } else { - rb_str_cat2(rb_str_cat2(str, ": "), msg); + if (RSTRING_LEN(str)) rb_str_cat2(str, ": "); + rb_str_cat2(str, msg ? msg : "(null)"); } } if (dOSSL == Qtrue){ /* show all errors on the stack */ diff --git a/version.h b/version.h index b033e58c7a0000..90c452302b850e 100644 --- a/version.h +++ b/version.h @@ -1,10 +1,10 @@ #define RUBY_VERSION "2.1.2" -#define RUBY_RELEASE_DATE "2014-05-01" -#define RUBY_PATCHLEVEL 82 +#define RUBY_RELEASE_DATE "2014-05-02" +#define RUBY_PATCHLEVEL 83 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 -#define RUBY_RELEASE_DAY 1 +#define RUBY_RELEASE_DAY 2 #include "ruby/version.h" From 1b814b5a742758f561f1f8c216d83fca4f6ce505 Mon Sep 17 00:00:00 2001 From: nagachika Date: Sun, 4 May 2014 15:17:10 +0000 Subject: [PATCH 09/22] merge revision(s) r45393: [Backport #9668] * gc.c: Fix up default GC params by @csfrancis [fix GH-556] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45810 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ gc.c | 2 +- version.h | 6 +++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index b03e17ebb4a31d..c1c3bee4eda003 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Mon May 5 00:16:35 2014 SHIBATA Hiroshi + + * gc.c: Fix up default GC params by @csfrancis [fix GH-556] + Fri May 2 00:19:36 2014 Nobuyoshi Nakada * ext/openssl/ossl.c (ossl_make_error): check NULL for unknown diff --git a/gc.c b/gc.c index 2762db4529a9ad..58f6701ebc0574 100644 --- a/gc.c +++ b/gc.c @@ -150,8 +150,8 @@ typedef struct { } ruby_gc_params_t; static ruby_gc_params_t gc_params = { - GC_HEAP_FREE_SLOTS, GC_HEAP_INIT_SLOTS, + GC_HEAP_FREE_SLOTS, GC_HEAP_GROWTH_FACTOR, GC_HEAP_GROWTH_MAX_SLOTS, GC_HEAP_OLDOBJECT_LIMIT_FACTOR, diff --git a/version.h b/version.h index 90c452302b850e..3418bbc6a2b335 100644 --- a/version.h +++ b/version.h @@ -1,10 +1,10 @@ #define RUBY_VERSION "2.1.2" -#define RUBY_RELEASE_DATE "2014-05-02" -#define RUBY_PATCHLEVEL 83 +#define RUBY_RELEASE_DATE "2014-05-05" +#define RUBY_PATCHLEVEL 84 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 -#define RUBY_RELEASE_DAY 2 +#define RUBY_RELEASE_DAY 5 #include "ruby/version.h" From f55b93fe722e8b1923ff94661ee0c5d6472fb152 Mon Sep 17 00:00:00 2001 From: nagachika Date: Sun, 4 May 2014 15:40:57 +0000 Subject: [PATCH 10/22] merge revision(s) r45221: [Backport #9798] * ext/psych/lib/psych/visitors/yaml_tree.rb: support dumping Encoding objects. * ext/psych/lib/psych/visitors/to_ruby.rb: support loading Encoding objects. * test/psych/test_encoding.rb: add test * ext/psych/lib/psych.rb: add version git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45811 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 12 ++++++++++++ ext/psych/lib/psych.rb | 2 +- ext/psych/lib/psych/visitors/to_ruby.rb | 2 ++ ext/psych/lib/psych/visitors/yaml_tree.rb | 5 +++++ test/psych/test_encoding.rb | 5 +++++ version.h | 2 +- 6 files changed, 26 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index c1c3bee4eda003..fc0d3674b562fc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +Mon May 5 00:35:20 2014 Aaron Patterson + + * ext/psych/lib/psych/visitors/yaml_tree.rb: support dumping Encoding + objects. + + * ext/psych/lib/psych/visitors/to_ruby.rb: support loading Encoding + objects. + + * test/psych/test_encoding.rb: add test + + * ext/psych/lib/psych.rb: add version + Mon May 5 00:16:35 2014 SHIBATA Hiroshi * gc.c: Fix up default GC params by @csfrancis [fix GH-556] diff --git a/ext/psych/lib/psych.rb b/ext/psych/lib/psych.rb index 4b422f56449b38..55d68dcd512931 100644 --- a/ext/psych/lib/psych.rb +++ b/ext/psych/lib/psych.rb @@ -217,7 +217,7 @@ module Psych # The version is Psych you're using - VERSION = '2.0.3' + VERSION = '2.0.4' # The version of libyaml Psych is using LIBYAML_VERSION = Psych.libyaml_version.join '.' diff --git a/ext/psych/lib/psych/visitors/to_ruby.rb b/ext/psych/lib/psych/visitors/to_ruby.rb index 1bfffb952f1c5f..5c3baa5b68fd65 100644 --- a/ext/psych/lib/psych/visitors/to_ruby.rb +++ b/ext/psych/lib/psych/visitors/to_ruby.rb @@ -75,6 +75,8 @@ def deserialize o class_loader.date_time require 'date' @ss.parse_time(o.value).to_datetime + when '!ruby/encoding' + ::Encoding.find o.value when "!ruby/object:Complex" class_loader.complex Complex(o.value) diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb index f89fcbb8f12c3e..ff0fcd204c8a45 100644 --- a/ext/psych/lib/psych/visitors/yaml_tree.rb +++ b/ext/psych/lib/psych/visitors/yaml_tree.rb @@ -157,6 +157,11 @@ def visit_Psych_Omap o @emitter.end_sequence end + def visit_Encoding o + tag = "!ruby/encoding" + @emitter.scalar o.name, nil, tag, false, false, Nodes::Scalar::ANY + end + def visit_Object o tag = Psych.dump_tags[o.class] unless tag diff --git a/test/psych/test_encoding.rb b/test/psych/test_encoding.rb index e370606c77160a..517cae20692de3 100644 --- a/test/psych/test_encoding.rb +++ b/test/psych/test_encoding.rb @@ -31,6 +31,11 @@ def setup @emitter = Psych::Emitter.new @buffer end + def test_dump_load_encoding_object + assert_cycle Encoding::US_ASCII + assert_cycle Encoding::UTF_8 + end + def test_transcode_shiftjis str = "こんにちは!" loaded = Psych.load("--- こんにちは!".encode('SHIFT_JIS')) diff --git a/version.h b/version.h index 3418bbc6a2b335..dcb7935f15f91b 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-05-05" -#define RUBY_PATCHLEVEL 84 +#define RUBY_PATCHLEVEL 85 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 From e6a782e784e3f15f8d89ea88ec67c5e6240a8f83 Mon Sep 17 00:00:00 2001 From: nagachika Date: Sun, 4 May 2014 15:45:33 +0000 Subject: [PATCH 11/22] merge revision(s) r45453,r45455,r45577: [Backport #9798] * ext/psych/lib/psych.rb: Merge psych-2.0.5. bump version to libyaml-0.1.6 for CVE-2014-2525. * ext/psych/yaml/config.h: ditto. * ext/psych/yaml/scanner.c: ditto. * ext/psych/yaml/yaml_private.h: ditto. * ext/psych/psych.gemspec: update gemspec for psych-2.0.5 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45812 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 12 ++++++++++++ ext/psych/lib/psych.rb | 4 ++-- ext/psych/psych.gemspec | 6 +++--- ext/psych/yaml/config.h | 9 ++++----- ext/psych/yaml/scanner.c | 3 +++ ext/psych/yaml/yaml_private.h | 7 +++++-- version.h | 2 +- 7 files changed, 30 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index fc0d3674b562fc..3599ce7b6fe8a7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +Mon May 5 00:42:35 2014 SHIBATA Hiroshi + + * ext/psych/psych.gemspec: update gemspec for psych-2.0.5 + +Mon May 5 00:42:35 2014 SHIBATA Hiroshi + + * ext/psych/lib/psych.rb: Merge psych-2.0.5. bump version to + libyaml-0.1.6 for CVE-2014-2525. + * ext/psych/yaml/config.h: ditto. + * ext/psych/yaml/scanner.c: ditto. + * ext/psych/yaml/yaml_private.h: ditto. + Mon May 5 00:35:20 2014 Aaron Patterson * ext/psych/lib/psych/visitors/yaml_tree.rb: support dumping Encoding diff --git a/ext/psych/lib/psych.rb b/ext/psych/lib/psych.rb index 55d68dcd512931..329514a930a005 100644 --- a/ext/psych/lib/psych.rb +++ b/ext/psych/lib/psych.rb @@ -21,7 +21,7 @@ # # Psych is a YAML parser and emitter. # Psych leverages libyaml [Home page: http://pyyaml.org/wiki/LibYAML] -# or [Git repo: https://github.com/zerotao/libyaml] for its YAML parsing +# or [HG repo: https://bitbucket.org/xi/libyaml] for its YAML parsing # and emitting capabilities. In addition to wrapping libyaml, Psych also # knows how to serialize and de-serialize most Ruby objects to and from # the YAML format. @@ -217,7 +217,7 @@ module Psych # The version is Psych you're using - VERSION = '2.0.4' + VERSION = '2.0.5' # The version of libyaml Psych is using LIBYAML_VERSION = Psych.libyaml_version.join '.' diff --git a/ext/psych/psych.gemspec b/ext/psych/psych.gemspec index 100b6ff73720ad..6d53aef12241fb 100644 --- a/ext/psych/psych.gemspec +++ b/ext/psych/psych.gemspec @@ -2,12 +2,12 @@ Gem::Specification.new do |s| s.name = "psych" - s.version = "2.0.3" + s.version = "2.0.5" s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.require_paths = ["lib"] s.authors = ["Aaron Patterson"] - s.date = "2014-02-04" + s.date = "2014-03-27" s.description = "Psych is a YAML parser and emitter. Psych leverages libyaml[http://pyyaml.org/wiki/LibYAML]\nfor its YAML parsing and emitting capabilities. In addition to wrapping\nlibyaml, Psych also knows how to serialize and de-serialize most Ruby objects\nto and from the YAML format." s.email = ["aaron@tenderlovemaking.com"] s.extensions = ["ext/psych/extconf.rb"] @@ -17,7 +17,7 @@ Gem::Specification.new do |s| s.rdoc_options = ["--main", "README.rdoc"] s.required_ruby_version = Gem::Requirement.new(">= 1.9.2") s.rubyforge_project = "psych" - s.rubygems_version = "2.2.1" + s.rubygems_version = "2.2.2" s.summary = "Psych is a YAML parser and emitter" s.test_files = ["test/psych/handlers/test_recorder.rb", "test/psych/json/test_stream.rb", "test/psych/nodes/test_enumerable.rb", "test/psych/test_alias_and_anchor.rb", "test/psych/test_array.rb", "test/psych/test_boolean.rb", "test/psych/test_class.rb", "test/psych/test_coder.rb", "test/psych/test_date_time.rb", "test/psych/test_deprecated.rb", "test/psych/test_document.rb", "test/psych/test_emitter.rb", "test/psych/test_encoding.rb", "test/psych/test_engine_manager.rb", "test/psych/test_exception.rb", "test/psych/test_hash.rb", "test/psych/test_json_tree.rb", "test/psych/test_merge_keys.rb", "test/psych/test_nil.rb", "test/psych/test_null.rb", "test/psych/test_numeric.rb", "test/psych/test_object.rb", "test/psych/test_object_references.rb", "test/psych/test_omap.rb", "test/psych/test_parser.rb", "test/psych/test_psych.rb", "test/psych/test_safe_load.rb", "test/psych/test_scalar.rb", "test/psych/test_scalar_scanner.rb", "test/psych/test_serialize_subclasses.rb", "test/psych/test_set.rb", "test/psych/test_stream.rb", "test/psych/test_string.rb", "test/psych/test_struct.rb", "test/psych/test_symbol.rb", "test/psych/test_tainted.rb", "test/psych/test_to_yaml_properties.rb", "test/psych/test_tree_builder.rb", "test/psych/test_yaml.rb", "test/psych/test_yamldbm.rb", "test/psych/test_yamlstore.rb", "test/psych/visitors/test_depth_first.rb", "test/psych/visitors/test_emitter.rb", "test/psych/visitors/test_to_ruby.rb", "test/psych/visitors/test_yaml_tree.rb"] end diff --git a/ext/psych/yaml/config.h b/ext/psych/yaml/config.h index fb62651340416d..f54c27d339e1c4 100644 --- a/ext/psych/yaml/config.h +++ b/ext/psych/yaml/config.h @@ -1,11 +1,10 @@ - #define PACKAGE_NAME "yaml" #define PACKAGE_TARNAME "yaml" -#define PACKAGE_VERSION "0.1.5" -#define PACKAGE_STRING "yaml 0.1.5" +#define PACKAGE_VERSION "0.1.6" +#define PACKAGE_STRING "yaml 0.1.6" #define PACKAGE_BUGREPORT "http://pyyaml.org/newticket?component libyaml" #define PACKAGE_URL "" #define YAML_VERSION_MAJOR 0 #define YAML_VERSION_MINOR 1 -#define YAML_VERSION_PATCH 5 -#define YAML_VERSION_STRING "0.1.5" +#define YAML_VERSION_PATCH 6 +#define YAML_VERSION_STRING "0.1.6" diff --git a/ext/psych/yaml/scanner.c b/ext/psych/yaml/scanner.c index 34308d5d4540d7..af05766f5cc7b6 100644 --- a/ext/psych/yaml/scanner.c +++ b/ext/psych/yaml/scanner.c @@ -2629,6 +2629,9 @@ yaml_parser_scan_tag_uri(yaml_parser_t *parser, int directive, /* Check if it is a URI-escape sequence. */ if (CHECK(parser->buffer, '%')) { + if (!STRING_EXTEND(parser, string)) + goto error; + if (!yaml_parser_scan_uri_escapes(parser, directive, start_mark, &string)) goto error; } diff --git a/ext/psych/yaml/yaml_private.h b/ext/psych/yaml/yaml_private.h index cd3d3a56c4b4e6..944499c94eb9dc 100644 --- a/ext/psych/yaml/yaml_private.h +++ b/ext/psych/yaml/yaml_private.h @@ -146,9 +146,12 @@ yaml_string_join( (string).start = (string).pointer = (string).end = 0) #define STRING_EXTEND(context,string) \ - (((string).pointer+5 < (string).end) \ + ((((string).pointer+5 < (string).end) \ || yaml_string_extend(&(string).start, \ - &(string).pointer, &(string).end)) + &(string).pointer, &(string).end)) ? \ + 1 : \ + ((context)->error = YAML_MEMORY_ERROR, \ + 0)) #define CLEAR(context,string) \ ((string).pointer = (string).start, \ diff --git a/version.h b/version.h index dcb7935f15f91b..1506ab1693f210 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-05-05" -#define RUBY_PATCHLEVEL 85 +#define RUBY_PATCHLEVEL 86 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 From 23bed1e3cda64bb7db591dadc69fdf37db326569 Mon Sep 17 00:00:00 2001 From: nagachika Date: Sun, 4 May 2014 15:55:30 +0000 Subject: [PATCH 12/22] merge revision(s) r45015: [Backport #9657] * ext/bigdecimal/bigdecimal.c (BigDecimal_initialize): Insert GC guard. * ext/bigdecimal/bigdecimal.c (BigDecimal_global_new): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45815 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ ext/bigdecimal/bigdecimal.c | 9 +++++++-- version.h | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3599ce7b6fe8a7..0ff0224b348263 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon May 5 00:52:18 2014 Kenta Murata + + * ext/bigdecimal/bigdecimal.c (BigDecimal_initialize): Insert GC guard. + + * ext/bigdecimal/bigdecimal.c (BigDecimal_global_new): ditto. + Mon May 5 00:42:35 2014 SHIBATA Hiroshi * ext/psych/psych.gemspec: update gemspec for psych-2.0.5 diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index 4120a2346dc948..6425a17db2cd7e 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -2456,9 +2456,11 @@ static Real *BigDecimal_new(int argc, VALUE *argv); static VALUE BigDecimal_initialize(int argc, VALUE *argv, VALUE self) { + ENTER(1); Real *pv = rb_check_typeddata(self, &BigDecimal_data_type); - Real *x = BigDecimal_new(argc, argv); + Real *x; + GUARD_OBJ(x, BigDecimal_new(argc, argv)); if (ToValue(x)) { pv = VpCopy(pv, x); } @@ -2539,7 +2541,10 @@ BigDecimal_new(int argc, VALUE *argv) static VALUE BigDecimal_global_new(int argc, VALUE *argv, VALUE self) { - Real *pv = BigDecimal_new(argc, argv); + ENTER(1); + Real *pv; + + GUARD_OBJ(pv, BigDecimal_new(argc, argv)); if (ToValue(pv)) pv = VpCopy(NULL, pv); pv->obj = TypedData_Wrap_Struct(rb_cBigDecimal, &BigDecimal_data_type, pv); return pv->obj; diff --git a/version.h b/version.h index 1506ab1693f210..fe4bbb31ffa8dc 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-05-05" -#define RUBY_PATCHLEVEL 86 +#define RUBY_PATCHLEVEL 87 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 From d8eba4057a63472e3c5f146426dd93daf898800c Mon Sep 17 00:00:00 2001 From: nagachika Date: Sun, 4 May 2014 16:17:08 +0000 Subject: [PATCH 13/22] merge revision(s) r45468: [Backport #9687] * gc.c (gc_before_sweep): cap `malloc_limit' to gc_params.malloc_limit_max. It can grow and grow with such case: `loop{"a" * (1024 ** 2)}' [Bug #9687] This issue is pointed by Tim Robertson. http://www.omniref.com/blog/blog/2014/03/27/ruby-garbage-collection-still-not-ready-for-production/ git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45817 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 10 ++++++++++ gc.c | 2 +- version.h | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0ff0224b348263..89d0b4037cef52 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Mon May 5 01:13:00 2014 Koichi Sasada + + * gc.c (gc_before_sweep): cap `malloc_limit' to + gc_params.malloc_limit_max. It can grow and grow with such case: + `loop{"a" * (1024 ** 2)}' + [Bug #9687] + + This issue is pointed by Tim Robertson. + http://www.omniref.com/blog/blog/2014/03/27/ruby-garbage-collection-still-not-ready-for-production/ + Mon May 5 00:52:18 2014 Kenta Murata * ext/bigdecimal/bigdecimal.c (BigDecimal_initialize): Insert GC guard. diff --git a/gc.c b/gc.c index 58f6701ebc0574..ebcfd425ce8863 100644 --- a/gc.c +++ b/gc.c @@ -2886,7 +2886,7 @@ gc_before_sweep(rb_objspace_t *objspace) malloc_limit = (size_t)(inc * gc_params.malloc_limit_growth_factor); if (gc_params.malloc_limit_max > 0 && /* ignore max-check if 0 */ malloc_limit > gc_params.malloc_limit_max) { - malloc_limit = inc; + malloc_limit = gc_params.malloc_limit_max; } } else { diff --git a/version.h b/version.h index fe4bbb31ffa8dc..45c012b398f664 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-05-05" -#define RUBY_PATCHLEVEL 87 +#define RUBY_PATCHLEVEL 88 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 From 916c913496404ec2b2a17c85822f8b18b3902ce8 Mon Sep 17 00:00:00 2001 From: nagachika Date: Sun, 4 May 2014 16:26:30 +0000 Subject: [PATCH 14/22] merge revision(s) r45638: [Backport #9518] * gc.c (rb_gc_writebarrier): drop special case for big hash/array [Bug #9518] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45818 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ gc.c | 17 +++-------------- version.h | 2 +- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 89d0b4037cef52..a8631f7986ba96 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon May 5 01:20:27 2014 Eric Wong + + * gc.c (rb_gc_writebarrier): drop special case for big hash/array + [Bug #9518] + Mon May 5 01:13:00 2014 Koichi Sasada * gc.c (gc_before_sweep): cap `malloc_limit' to diff --git a/gc.c b/gc.c index ebcfd425ce8863..11b155607bf061 100644 --- a/gc.c +++ b/gc.c @@ -4729,20 +4729,9 @@ rb_gc_writebarrier(VALUE a, VALUE b) rb_objspace_t *objspace = &rb_objspace; if (!rgengc_remembered(objspace, a)) { - int type = BUILTIN_TYPE(a); - /* TODO: 2 << 16 is just a magic number. */ - if ((type == T_ARRAY && RARRAY_LEN(a) >= 2 << 16) || - (type == T_HASH && RHASH_SIZE(a) >= 2 << 16)) { - if (!rgengc_remembered(objspace, b)) { - rgengc_report(2, objspace, "rb_gc_wb: %p (%s) -> %p (%s)\n", (void *)a, obj_type_name(a), (void *)b, obj_type_name(b)); - rgengc_remember(objspace, b); - } - } - else { - rgengc_report(2, objspace, "rb_gc_wb: %p (%s) -> %p (%s)\n", - (void *)a, obj_type_name(a), (void *)b, obj_type_name(b)); - rgengc_remember(objspace, a); - } + rgengc_report(2, objspace, "rb_gc_wb: %p (%s) -> %p (%s)\n", + (void *)a, obj_type_name(a), (void *)b, obj_type_name(b)); + rgengc_remember(objspace, a); } } } diff --git a/version.h b/version.h index 45c012b398f664..f6c311b4f27168 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-05-05" -#define RUBY_PATCHLEVEL 88 +#define RUBY_PATCHLEVEL 89 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 From e82dd50a6b179f8f8247241cfb458121d88b2306 Mon Sep 17 00:00:00 2001 From: nagachika Date: Sun, 4 May 2014 17:19:20 +0000 Subject: [PATCH 15/22] merge revision(s) r45298,r45311: [Backport #9518] test/ruby/envutil.rb: compare RSS to check memory leak * test/ruby/envutil.rb (Test::Test#assert_no_memory_leak): compare also RSS if available. * test/ruby/memory_status.rb (Memory::Status.parse): read string form of an instance. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45819 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/envutil.rb | 18 +++++++++++++----- test/ruby/memory_status.rb | 17 +++++++++++++++-- version.h | 2 +- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/test/ruby/envutil.rb b/test/ruby/envutil.rb index 079658bfbda6e2..5ebcabe9011555 100644 --- a/test/ruby/envutil.rb +++ b/test/ruby/envutil.rb @@ -373,6 +373,7 @@ def assert_warn(*args) end def assert_no_memory_leak(args, prepare, code, message=nil, limit: 1.5, **opt) + require_relative 'memory_status' token = "\e[7;1m#{$$.to_s}:#{Time.now.strftime('%s.%L')}:#{rand(0x10000).to_s(16)}:\e[m" token_dump = token.dump token_re = Regexp.quote(token) @@ -385,16 +386,23 @@ def assert_no_memory_leak(args, prepare, code, message=nil, limit: 1.5, **opt) ] args.unshift(envs) if envs cmd = [ - 'END {STDERR.puts '"#{token_dump}"'"FINAL=#{Memory::Status.new.size}"}', + 'END {STDERR.puts '"#{token_dump}"'"FINAL=#{Memory::Status.new}"}', prepare, - 'STDERR.puts('"#{token_dump}"'"START=#{$initial_size = Memory::Status.new.size}")', + 'STDERR.puts('"#{token_dump}"'"START=#{$initial_status = Memory::Status.new}")', + '$initial_size = $initial_status.size', code, + 'GC.start', ].join("\n") _, err, status = EnvUtil.invoke_ruby(args, cmd, true, true, **opt) - before = err.sub!(/^#{token_re}START=(\d+)\n/, '') && $1.to_i - after = err.sub!(/^#{token_re}FINAL=(\d+)\n/, '') && $1.to_i + before = err.sub!(/^#{token_re}START=(\{.*\})\n/, '') && Memory::Status.parse($1) + after = err.sub!(/^#{token_re}FINAL=(\{.*\})\n/, '') && Memory::Status.parse($1) assert_equal([true, ""], [status.success?, err], message) - assert_operator(after.fdiv(before), :<, limit, message) + ([:size, :rss] & after.members).each do |n| + b = before[n] + a = after[n] + next unless a > 0 and b > 0 + assert_operator(a.fdiv(b), :<, limit, message(message) {"#{n}: #{b} => #{a}"}) + end end def assert_is_minus_zero(f) diff --git a/test/ruby/memory_status.rb b/test/ruby/memory_status.rb index cb2e9e094c030b..bfbfbd6e880b06 100644 --- a/test/ruby/memory_status.rb +++ b/test/ruby/memory_status.rb @@ -1,5 +1,3 @@ -require_relative "envutil" - module Memory keys = [] vals = [] @@ -110,5 +108,20 @@ class Status def initialize _update end + + def to_s + status = each_pair.map {|n,v| + "#{n}:#{v}" + } + "{#{status.join(",")}}" + end + + def self.parse(str) + status = allocate + str.scan(/(?:\A\{|\G,)(#{members.join('|')}):(\d+)(?=,|\}\z)/) do + status[$1] = $2.to_i + end + status + end end end diff --git a/version.h b/version.h index f6c311b4f27168..43ad9c2507ddf2 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-05-05" -#define RUBY_PATCHLEVEL 89 +#define RUBY_PATCHLEVEL 90 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 From 0385f542af71d87c0565c4233db821094af7c52d Mon Sep 17 00:00:00 2001 From: nagachika Date: Sun, 4 May 2014 17:32:44 +0000 Subject: [PATCH 16/22] merge revision(s) r45291,r45299,r45314,r45325: [Backport #9518] * ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free), ext/fiddle/handle.c (fiddle_handle_free), ext/fiddle/pointer.c (fiddle_ptr_free): fix memory leak. based on the patch Heesob Park at [ruby-dev:48021] [Bug #9599]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45820 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ ext/dl/cptr.c | 1 + ext/dl/handle.c | 1 + ext/fiddle/handle.c | 1 + ext/fiddle/pointer.c | 1 + test/dl/test_cptr.rb | 4 ++++ test/dl/test_handle.rb | 4 ++++ test/fiddle/test_handle.rb | 7 +++++++ test/fiddle/test_pointer.rb | 4 ++++ test/ruby/envutil.rb | 4 ++-- version.h | 2 +- 11 files changed, 33 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index a8631f7986ba96..61817c79f37f10 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon May 5 02:21:48 2014 Nobuyoshi Nakada + + * ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free), + ext/fiddle/handle.c (fiddle_handle_free), + ext/fiddle/pointer.c (fiddle_ptr_free): fix memory leak. + based on the patch Heesob Park at [ruby-dev:48021] [Bug #9599]. + Mon May 5 01:20:27 2014 Eric Wong * gc.c (rb_gc_writebarrier): drop special case for big hash/array diff --git a/ext/dl/cptr.c b/ext/dl/cptr.c index 3f8858c4b37c2e..d34309379bbf58 100644 --- a/ext/dl/cptr.c +++ b/ext/dl/cptr.c @@ -49,6 +49,7 @@ dlptr_free(void *ptr) (*(data->free))(data->ptr); } } + xfree(ptr); } static size_t diff --git a/ext/dl/handle.c b/ext/dl/handle.c index ef182e816fc971..6b90e089eef82d 100644 --- a/ext/dl/handle.c +++ b/ext/dl/handle.c @@ -38,6 +38,7 @@ dlhandle_free(void *ptr) if( dlhandle->ptr && dlhandle->open && dlhandle->enable_close ){ dlclose(dlhandle->ptr); } + xfree(ptr); } static size_t diff --git a/ext/fiddle/handle.c b/ext/fiddle/handle.c index 330dbafe67cf03..36970a22486781 100644 --- a/ext/fiddle/handle.c +++ b/ext/fiddle/handle.c @@ -40,6 +40,7 @@ fiddle_handle_free(void *ptr) if( fiddle_handle->ptr && fiddle_handle->open && fiddle_handle->enable_close ){ dlclose(fiddle_handle->ptr); } + xfree(ptr); } static size_t diff --git a/ext/fiddle/pointer.c b/ext/fiddle/pointer.c index 0129363a8df2de..b763a0c12372b6 100644 --- a/ext/fiddle/pointer.c +++ b/ext/fiddle/pointer.c @@ -56,6 +56,7 @@ fiddle_ptr_free(void *ptr) (*(data->free))(data->ptr); } } + xfree(ptr); } static size_t diff --git a/test/dl/test_cptr.rb b/test/dl/test_cptr.rb index c3793859d714a0..aa74a73fe54fb2 100644 --- a/test/dl/test_cptr.rb +++ b/test/dl/test_cptr.rb @@ -219,4 +219,8 @@ def test_null_pointer assert_raise(DLError) {nullpo[0] = 1} end end + + def test_no_memory_leak + assert_no_memory_leak(%w[-W0 -rdl.so], '', '100_000.times {DL::CPtr.allocate}', rss: true) + end end diff --git a/test/dl/test_handle.rb b/test/dl/test_handle.rb index 83b8af196041f9..6a8964e9a0aebc 100644 --- a/test/dl/test_handle.rb +++ b/test/dl/test_handle.rb @@ -184,4 +184,8 @@ def test_dlerror DL.dlopen("/lib/libc.so.7").sym('strcpy') end if /freebsd/=~ RUBY_PLATFORM end + + def test_no_memory_leak + assert_no_memory_leak(%w[-W0 -rdl.so], '', '100_000.times {DL::Handle.allocate}; GC.start', rss: true) + end end diff --git a/test/fiddle/test_handle.rb b/test/fiddle/test_handle.rb index c598cc33a2cb09..cde3fa816dcef9 100644 --- a/test/fiddle/test_handle.rb +++ b/test/fiddle/test_handle.rb @@ -1,5 +1,6 @@ begin require_relative 'helper' + require_relative '../ruby/envutil' rescue LoadError end @@ -7,6 +8,8 @@ module Fiddle class TestHandle < TestCase include Fiddle + include Test::Unit::Assertions + def test_to_i handle = Fiddle::Handle.new(LIBC_SO) assert_kind_of Integer, handle.to_i @@ -185,5 +188,9 @@ def test_dlerror Socket.gethostbyname("localhost") Fiddle.dlopen("/lib/libc.so.7").sym('strcpy') end if /freebsd/=~ RUBY_PLATFORM + + def test_no_memory_leak + assert_no_memory_leak(%w[-W0 -rfiddle.so], '', '100_000.times {Fiddle::Handle.allocate}; GC.start', rss: true) + end end end if defined?(Fiddle) diff --git a/test/fiddle/test_pointer.rb b/test/fiddle/test_pointer.rb index 1d908f64d9a61b..2ba11b4ed7c808 100644 --- a/test/fiddle/test_pointer.rb +++ b/test/fiddle/test_pointer.rb @@ -230,5 +230,9 @@ def test_null_pointer assert_raise(DLError) {nullpo[0]} assert_raise(DLError) {nullpo[0] = 1} end + + def test_no_memory_leak + assert_no_memory_leak(%w[-W0 -rfiddle.so], '', '100_000.times {Fiddle::Pointer.allocate}', rss: true) + end end end if defined?(Fiddle) diff --git a/test/ruby/envutil.rb b/test/ruby/envutil.rb index 5ebcabe9011555..de66102621cebd 100644 --- a/test/ruby/envutil.rb +++ b/test/ruby/envutil.rb @@ -372,7 +372,7 @@ def assert_warn(*args) assert_warning(*args) {$VERBOSE = false; yield} end - def assert_no_memory_leak(args, prepare, code, message=nil, limit: 1.5, **opt) + def assert_no_memory_leak(args, prepare, code, message=nil, limit: 1.5, rss: false, **opt) require_relative 'memory_status' token = "\e[7;1m#{$$.to_s}:#{Time.now.strftime('%s.%L')}:#{rand(0x10000).to_s(16)}:\e[m" token_dump = token.dump @@ -397,7 +397,7 @@ def assert_no_memory_leak(args, prepare, code, message=nil, limit: 1.5, **opt) before = err.sub!(/^#{token_re}START=(\{.*\})\n/, '') && Memory::Status.parse($1) after = err.sub!(/^#{token_re}FINAL=(\{.*\})\n/, '') && Memory::Status.parse($1) assert_equal([true, ""], [status.success?, err], message) - ([:size, :rss] & after.members).each do |n| + ([:size, (rss && :rss)] & after.members).each do |n| b = before[n] a = after[n] next unless a > 0 and b > 0 diff --git a/version.h b/version.h index 43ad9c2507ddf2..91c96cafa6b0ed 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-05-05" -#define RUBY_PATCHLEVEL 90 +#define RUBY_PATCHLEVEL 91 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 From eabdb7b555c2db713c173e430ba5ebc4ff231c48 Mon Sep 17 00:00:00 2001 From: nagachika Date: Sun, 4 May 2014 17:44:00 +0000 Subject: [PATCH 17/22] merge revision(s) r45595: [Backport #9743] [Backport #9745] * ext/openssl/ossl_pkey.c (ossl_pkey_verify): as EVP_VerifyFinal() finalizes only a copy of the digest context, the context must be cleaned up after initialization by EVP_MD_CTX_cleanup() or a memory leak will occur. [ruby-core:62038] [Bug #9743] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45821 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ ext/openssl/ossl_pkey.c | 7 +++++-- test/openssl/test_pkey_rsa.rb | 30 ++++++++++++++++++++++++++++++ version.h | 2 +- 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 61817c79f37f10..837c087c65f5ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon May 5 02:35:20 2014 Nobuyoshi Nakada + + * ext/openssl/ossl_pkey.c (ossl_pkey_verify): as EVP_VerifyFinal() + finalizes only a copy of the digest context, the context must be + cleaned up after initialization by EVP_MD_CTX_cleanup() or a + memory leak will occur. [ruby-core:62038] [Bug #9743] + Mon May 5 02:21:48 2014 Nobuyoshi Nakada * ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free), diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c index 0004d9d9b5e941..878b221270afd5 100644 --- a/ext/openssl/ossl_pkey.c +++ b/ext/openssl/ossl_pkey.c @@ -318,13 +318,16 @@ ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data) { EVP_PKEY *pkey; EVP_MD_CTX ctx; + int result; GetPKey(self, pkey); - EVP_VerifyInit(&ctx, GetDigestPtr(digest)); StringValue(sig); StringValue(data); + EVP_VerifyInit(&ctx, GetDigestPtr(digest)); EVP_VerifyUpdate(&ctx, RSTRING_PTR(data), RSTRING_LEN(data)); - switch (EVP_VerifyFinal(&ctx, (unsigned char *)RSTRING_PTR(sig), RSTRING_LENINT(sig), pkey)) { + result = EVP_VerifyFinal(&ctx, (unsigned char *)RSTRING_PTR(sig), RSTRING_LENINT(sig), pkey); + EVP_MD_CTX_cleanup(&ctx); + switch (result) { case 0: return Qfalse; case 1: diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb index 1881525c02e900..ce9bd60c2f1519 100644 --- a/test/openssl/test_pkey_rsa.rb +++ b/test/openssl/test_pkey_rsa.rb @@ -75,6 +75,36 @@ def test_sign_verify assert(key.verify(digest, sig, data)) end + def test_sign_verify_memory_leak + bug9743 = '[ruby-core:62038] [Bug #9743]' + assert_no_memory_leak(%w[-ropenssl], <<-PREP, <<-CODE, bug9743, rss: true) + data = 'Sign me!' + digest = OpenSSL::Digest::SHA512.new + pkey = OpenSSL::PKey::RSA.new(2048) + signature = pkey.sign(digest, data) + pub_key = pkey.public_key + PREP + 20_000.times { + pub_key.verify(digest, signature, data) + } + CODE + + assert_no_memory_leak(%w[-ropenssl], <<-PREP, <<-CODE, bug9743, rss: true) + data = 'Sign me!' + digest = OpenSSL::Digest::SHA512.new + pkey = OpenSSL::PKey::RSA.new(2048) + signature = pkey.sign(digest, data) + pub_key = pkey.public_key + PREP + 20_000.times { + begin + pub_key.verify(digest, signature, 1) + rescue TypeError + end + } + CODE + end + def test_digest_state_irrelevant_sign key = OpenSSL::TestUtils::TEST_KEY_RSA1024 digest1 = OpenSSL::Digest::SHA1.new diff --git a/version.h b/version.h index 91c96cafa6b0ed..17a7f7a8e28b52 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-05-05" -#define RUBY_PATCHLEVEL 91 +#define RUBY_PATCHLEVEL 92 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 From 006bb0bf8b08a1e357dc557da4962d727af5e4b6 Mon Sep 17 00:00:00 2001 From: nagachika Date: Mon, 5 May 2014 16:16:48 +0000 Subject: [PATCH 18/22] merge revision(s) r45760: [Backport #9796] * gc.c (gc_after_sweep): suppress unnecessary expanding heap. Tomb heap pages are freed pages here, so expanding heap is not required. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45833 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ gc.c | 1 - version.h | 6 +++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 837c087c65f5ae..603eac564aba86 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Tue May 6 00:54:56 2014 Narihiro Nakamura + + * gc.c (gc_after_sweep): suppress unnecessary expanding heap. + Tomb heap pages are freed pages here, so expanding heap is + not required. + Mon May 5 02:35:20 2014 Nobuyoshi Nakada * ext/openssl/ossl_pkey.c (ossl_pkey_verify): as EVP_VerifyFinal() diff --git a/gc.c b/gc.c index 11b155607bf061..7812d921bfe35c 100644 --- a/gc.c +++ b/gc.c @@ -2972,7 +2972,6 @@ gc_after_sweep(rb_objspace_t *objspace) /* if heap_pages has unused pages, then assign them to increment */ if (heap_pages_increment < heap_tomb->page_length) { heap_pages_increment = heap_tomb->page_length; - heap_pages_expand_sorted(objspace); } #if RGENGC_PROFILE > 0 diff --git a/version.h b/version.h index 17a7f7a8e28b52..a5e4c2bff76211 100644 --- a/version.h +++ b/version.h @@ -1,10 +1,10 @@ #define RUBY_VERSION "2.1.2" -#define RUBY_RELEASE_DATE "2014-05-05" -#define RUBY_PATCHLEVEL 92 +#define RUBY_RELEASE_DATE "2014-05-06" +#define RUBY_PATCHLEVEL 93 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 -#define RUBY_RELEASE_DAY 5 +#define RUBY_RELEASE_DAY 6 #include "ruby/version.h" From dfaab0392f9dc8dcb2e0d036e2856df9abee0c21 Mon Sep 17 00:00:00 2001 From: nagachika Date: Wed, 7 May 2014 15:49:11 +0000 Subject: [PATCH 19/22] merge revision(s) r44619: test_gc.rb: relax assertion * test/ruby/test_gc.rb (test_profiler_total_time): GC time may be shorter than the timer resolution. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45866 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_gc.rb | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/ruby/test_gc.rb b/test/ruby/test_gc.rb index c644aa5d9a2e81..402d560bff8b9c 100644 --- a/test/ruby/test_gc.rb +++ b/test/ruby/test_gc.rb @@ -244,7 +244,7 @@ def test_profiler_total_time GC::Profiler.clear GC.start - assert_operator(GC::Profiler.total_time, :>, 0) + assert_operator(GC::Profiler.total_time, :>=, 0) ensure GC::Profiler.disable end diff --git a/version.h b/version.h index a5e4c2bff76211..3e43f5d2098372 100644 --- a/version.h +++ b/version.h @@ -1,10 +1,10 @@ #define RUBY_VERSION "2.1.2" -#define RUBY_RELEASE_DATE "2014-05-06" -#define RUBY_PATCHLEVEL 93 +#define RUBY_RELEASE_DATE "2014-05-08" +#define RUBY_PATCHLEVEL 94 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 -#define RUBY_RELEASE_DAY 6 +#define RUBY_RELEASE_DAY 8 #include "ruby/version.h" From b0a974d2f6ff2b1056d96269baa34ee0bfc9c6ae Mon Sep 17 00:00:00 2001 From: nagachika Date: Wed, 7 May 2014 16:21:02 +0000 Subject: [PATCH 20/22] merge revision(s) r45190,r45202,r45204,r45713: [Backport #9586] configure.in: define SET_THREAD_NAME * configure.in (SET_THREAD_NAME): define according to pthread_setname_np variations. * configure.in: correct pthread_setname_np's prototype on NetBSD. [Bug #9586] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45867 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ configure.in | 30 ++++++++++++++++++++++++++++++ thread_pthread.c | 6 ++---- version.h | 2 +- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 603eac564aba86..1d4751abf476da 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu May 8 01:13:10 2014 NARUSE, Yui + + * configure.in: correct pthread_setname_np's prototype on NetBSD. + [Bug #9586] + Tue May 6 00:54:56 2014 Narihiro Nakamura * gc.c (gc_after_sweep): suppress unnecessary expanding heap. diff --git a/configure.in b/configure.in index 17ed3edea3d2e8..1a001e62530db7 100644 --- a/configure.in +++ b/configure.in @@ -2454,6 +2454,36 @@ if test x"$enable_pthread" = xyes; then else AC_CHECK_FUNCS(pthread_attr_init) fi + if test "$ac_cv_func_pthread_setname_np" = yes; then + AC_CACHE_CHECK([arguments of pthread_setname_np], [rb_cv_func_pthread_setname_np_arguments], + [rb_cv_func_pthread_setname_np_arguments= + # Linux,AIX, (pthread_self(), name) + # NetBSD (pthread_self(), name, \"%s\") + # Darwin (name) + for mac in \ + "(pthread_self(), name)" \ + "(pthread_self(), name, \"%s\")" \ + "(name)" \ + ; do + AC_TRY_COMPILE([ + @%:@include + @%:@ifdef HAVE_PTHREAD_NP_H + @%:@include + @%:@endif + @%:@define SET_THREAD_NAME(name) pthread_setname_np${mac} + ], + [if (SET_THREAD_NAME("conftest")) return 1;], + [rb_cv_func_pthread_setname_np_arguments="${mac}" + break]) + done + ] + ) + if test -n "${rb_cv_func_pthread_setname_np_arguments}"; then + AC_DEFINE_UNQUOTED(SET_THREAD_NAME(name), pthread_setname_np${rb_cv_func_pthread_setname_np_arguments}) + else + AC_DEFINE_UNQUOTED(SET_THREAD_NAME(name), (void)0) + fi + fi fi if test x"$ac_cv_header_ucontext_h" = xyes; then if test x"$rb_with_pthread" = xyes; then diff --git a/thread_pthread.c b/thread_pthread.c index aa8962a315fc5f..aa2c49e949ab9d 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -1422,11 +1422,9 @@ timer_thread_sleep(rb_global_vm_lock_t* unused) #endif /* USE_SLEEPY_TIMER_THREAD */ #if defined(__linux__) && defined(PR_SET_NAME) +# undef SET_THREAD_NAME # define SET_THREAD_NAME(name) prctl(PR_SET_NAME, name) -#elif defined(HAVE_PTHREAD_SETNAME_NP) -/* pthread_setname_np() on Darwin does not have target thread argument */ -# define SET_THREAD_NAME(name) pthread_setname_np(name) -#else +#elif !defined(SET_THREAD_NAME) # define SET_THREAD_NAME(name) (void)0 #endif diff --git a/version.h b/version.h index 3e43f5d2098372..a6b86f57e0fea7 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-05-08" -#define RUBY_PATCHLEVEL 94 +#define RUBY_PATCHLEVEL 95 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 From e9dce8d1b482200685996f64cc2c3bd6ba790110 Mon Sep 17 00:00:00 2001 From: nagachika Date: Thu, 8 May 2014 15:46:50 +0000 Subject: [PATCH 21/22] add tag v2_1_2 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v2_1_2@45877 b2dd03c8-39d4-4d8f-98ff-823fe69b080e From 9a21a49f745b6d5d961bea9cae11222ec0cb33e8 Mon Sep 17 00:00:00 2001 From: Dirkjan Bussink Date: Mon, 12 May 2014 11:46:42 +0200 Subject: [PATCH 22/22] Cleanup Changelog merge lines --- ChangeLog | 2 -- 1 file changed, 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1964a4be72ec91..996b9669c88c01 100644 --- a/ChangeLog +++ b/ChangeLog @@ -130,7 +130,6 @@ Mon Feb 24 14:56:41 2014 WATANABE Hirofumi Mon Feb 24 14:56:41 2014 NAKAMURA Usaku * tool/make-snapshot: support new version scheme. ->>>>>>> v2_1_2 Mon Feb 24 13:05:48 2014 Aaron Patterson @@ -711,7 +710,6 @@ Thu Jan 9 08:21:00 2014 Aman Gupta * test/net/imap/Makefile: add `make regen_certs` to automate this process. ->>>>>>> v2_1_1 Thu Dec 26 03:28:11 2013 Koichi Sasada * vm_insnhelper.c (argument_error): insert dummy frame to make pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy