diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-11 10:14:08 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-11 10:14:08 +0000 |
commit | 4a2867abe169c563e463f749923a7dbed640c409 (patch) | |
tree | 72afae9a76b43e7777c6bdda5d162c3f7b7bfbb0 /lib/erb.rb | |
parent | 35f2714452975d567a966b3e8614a203eac8f099 (diff) |
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]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@38318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/erb.rb')
-rw-r--r-- | lib/erb.rb | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/erb.rb b/lib/erb.rb index bb47943a86..8ff8e115ab 100644 --- a/lib/erb.rb +++ b/lib/erb.rb @@ -1,3 +1,4 @@ +# -*- coding: us-ascii -*- # = ERB -- Ruby Templating # # Author:: Masatoshi SEKI @@ -816,7 +817,7 @@ class ERB 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 @@ class ERB # _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 @@ class ERB 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: |