[前][次][番号順一覧][スレッド一覧]

ruby-changes:39517

From: usa <ko1@a...>
Date: Mon, 17 Aug 2015 16:23:14 +0900 (JST)
Subject: [ruby-changes:39517] usa:r51598 (ruby_2_1): merge revision(s) 51037: [Backport #11277]

usa	2015-08-17 16:23:03 +0900 (Mon, 17 Aug 2015)

  New Revision: 51598

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=51598

  Log:
    merge revision(s) 51037: [Backport #11277]
    
    * transcode.c (load_transcoder_entry): fix transcoder loading race
      condition, by waiting in require.  [ruby-dev:49106] [Bug #11277]

  Modified directories:
    branches/ruby_2_1/
  Modified files:
    branches/ruby_2_1/ChangeLog
    branches/ruby_2_1/test/ruby/test_transcode.rb
    branches/ruby_2_1/transcode.c
    branches/ruby_2_1/version.h
Index: ruby_2_1/ChangeLog
===================================================================
--- ruby_2_1/ChangeLog	(revision 51597)
+++ ruby_2_1/ChangeLog	(revision 51598)
@@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_1/ChangeLog#L1
+Mon Aug 17 16:22:28 2015  Nobuyoshi Nakada  <nobu@r...>
+
+	* transcode.c (load_transcoder_entry): fix transcoder loading race
+	  condition, by waiting in require.  [ruby-dev:49106] [Bug #11277]
+
 Mon Aug 17 16:18:13 2015  Nobuyoshi Nakada  <nobu@r...>
 
 	* array.c (ary_ensure_room_for_push): check if array size will
Index: ruby_2_1/version.h
===================================================================
--- ruby_2_1/version.h	(revision 51597)
+++ ruby_2_1/version.h	(revision 51598)
@@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_1/version.h#L1
 #define RUBY_VERSION "2.1.7"
 #define RUBY_RELEASE_DATE "2015-08-17"
-#define RUBY_PATCHLEVEL 381
+#define RUBY_PATCHLEVEL 382
 
 #define RUBY_RELEASE_YEAR 2015
 #define RUBY_RELEASE_MONTH 8
Index: ruby_2_1/test/ruby/test_transcode.rb
===================================================================
--- ruby_2_1/test/ruby/test_transcode.rb	(revision 51597)
+++ ruby_2_1/test/ruby/test_transcode.rb	(revision 51598)
@@ -2091,4 +2091,22 @@ class TestTranscode < Test::Unit::TestCa https://github.com/ruby/ruby/blob/trunk/ruby_2_1/test/ruby/test_transcode.rb#L2091
     assert_equal("\x00\x00\xFE\xFF\x00\x00\x00t\x00\x00\x00e\x00\x00\x00s\x00\x00\x00t", result.b, bug)
     end;
   end
+
+  def test_loading_race
+    assert_separately([], <<-'end;') #do
+      bug11277 = '[ruby-dev:49106] [Bug #11277]'
+      num = 2
+      th = (0...num).map do |i|
+        Thread.new {"\u3042".encode("EUC-JP")}
+      end
+      result = nil
+      assert_warning("", bug11277) do
+        assert_nothing_raised(Encoding::ConverterNotFoundError, bug11277) do
+          result = th.map(&:value)
+        end
+      end
+      expected = "\xa4\xa2".force_encoding(Encoding::EUC_JP)
+      assert_equal([expected]*num, result, bug11277)
+    end;
+  end
 end
Index: ruby_2_1/transcode.c
===================================================================
--- ruby_2_1/transcode.c	(revision 51597)
+++ ruby_2_1/transcode.c	(revision 51598)
@@ -372,15 +372,12 @@ load_transcoder_entry(transcoder_entry_t https://github.com/ruby/ruby/blob/trunk/ruby_2_1/transcode.c#L372
         char *const path = RSTRING_PTR(fn);
 	const int safe = rb_safe_level();
 
-        entry->lib = NULL;
-
         memcpy(path, transcoder_lib_prefix, sizeof(transcoder_lib_prefix) - 1);
         memcpy(path + sizeof(transcoder_lib_prefix) - 1, lib, len);
         rb_str_set_len(fn, total_len);
         FL_UNSET(fn, FL_TAINT);
         OBJ_FREEZE(fn);
-        if (!rb_require_safe(fn, safe > 3 ? 3 : safe))
-            return NULL;
+        rb_require_safe(fn, safe > 3 ? 3 : safe);
     }
 
     if (entry->transcoder)

Property changes on: ruby_2_1
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /trunk:r51037


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]