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

ruby-changes:26261

From: usa <ko1@a...>
Date: Tue, 11 Dec 2012 19:14:18 +0900 (JST)
Subject: [ruby-changes:26261] usa:r38318 (ruby_1_9_3): merge revision(s) 37594: [Backport #7046]

usa	2012-12-11 19:14:08 +0900 (Tue, 11 Dec 2012)

  New Revision: 38318

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

  Log:
    merge revision(s) 37594: [Backport #7046]
    
    * lib/erb.rb (ERB#run, ERB#result): eval under isolated bindings for
      safe concurrent use.  [ruby-core:47638] [Bug #7046]

  Modified directories:
    branches/ruby_1_9_3/
  Modified files:
    branches/ruby_1_9_3/ChangeLog
    branches/ruby_1_9_3/lib/erb.rb
    branches/ruby_1_9_3/test/erb/test_erb.rb
    branches/ruby_1_9_3/version.h

Index: ruby_1_9_3/ChangeLog
===================================================================
--- ruby_1_9_3/ChangeLog	(revision 38317)
+++ ruby_1_9_3/ChangeLog	(revision 38318)
@@ -1,3 +1,8 @@
+Tue Dec 11 19:01:45 2012  Nobuyoshi Nakada  <nobu@r...>
+
+	* lib/erb.rb (ERB#run, ERB#result): eval under isolated bindings for
+	  safe concurrent use.  [ruby-core:47638] [Bug #7046]
+
 Tue Dec 11 17:53:55 2012  Nobuyoshi Nakada  <nobu@r...>
 
 	* compile.c (iseq_compile_each): count flip-flop state in local iseq
Index: ruby_1_9_3/lib/erb.rb
===================================================================
--- ruby_1_9_3/lib/erb.rb	(revision 38317)
+++ ruby_1_9_3/lib/erb.rb	(revision 38318)
@@ -1,3 +1,4 @@
+# -*- coding: us-ascii -*-
 # = ERB -- Ruby Templating
 #
 # Author:: Masatoshi SEKI
@@ -816,7 +817,7 @@
   end
 
   # Generate results and print them. (see ERB#result)
-  def run(b=TOPLEVEL_BINDING)
+  def run(b=new_toplevel)
     print self.result(b)
   end
 
@@ -828,7 +829,7 @@
   # _b_ accepts a Binding or Proc object which is used to set the context of
   # code evaluation.
   #
-  def result(b=TOPLEVEL_BINDING)
+  def result(b=new_toplevel)
     if @safe_level
       proc {
         $SAFE = @safe_level
@@ -839,6 +840,12 @@
     end
   end
 
+  def new_toplevel
+    # New binding each time *near* toplevel for unspecified runs
+    TOPLEVEL_BINDING.dup
+  end
+  private :new_toplevel
+
   # Define _methodname_ as instance method of _mod_ from compiled ruby source.
   #
   # example:
Index: ruby_1_9_3/version.h
===================================================================
--- ruby_1_9_3/version.h	(revision 38317)
+++ ruby_1_9_3/version.h	(revision 38318)
@@ -1,5 +1,5 @@
 #define RUBY_VERSION "1.9.3"
-#define RUBY_PATCHLEVEL 336
+#define RUBY_PATCHLEVEL 337
 
 #define RUBY_RELEASE_DATE "2012-12-11"
 #define RUBY_RELEASE_YEAR 2012
Index: ruby_1_9_3/test/erb/test_erb.rb
===================================================================
--- ruby_1_9_3/test/erb/test_erb.rb	(revision 38317)
+++ ruby_1_9_3/test/erb/test_erb.rb	(revision 38318)
@@ -1,3 +1,4 @@
+# -*- coding: us-ascii -*-
 require 'test/unit'
 require 'erb'
 
@@ -37,6 +38,15 @@
     }
     assert_match(/\Atest filename:1\b/, e.backtrace[0])
   end
+
+  def test_concurrent_default_binding
+    template1 = 'one <%= ERB.new(template2).result %>'
+
+    eval 'template2 = "two"', TOPLEVEL_BINDING
+
+    bug7046 = '[ruby-core:47638]'
+    assert_equal("one two", ERB.new(template1).result, bug7046)
+  end
 end
 
 class TestERBCore < Test::Unit::TestCase

Property changes on: ruby_1_9_3
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /trunk:r37594


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

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