aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_view/base.rb9
-rw-r--r--actionpack/test/controller/new_render_test.rb22
-rw-r--r--actionpack/test/fixtures/test/dot.directory/render_file_with_ivar.rhtml1
3 files changed, 29 insertions, 3 deletions
diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb
index 94e7a47232..b118ee1042 100644
--- a/actionpack/lib/action_view/base.rb
+++ b/actionpack/lib/action_view/base.rb
@@ -221,7 +221,7 @@ module ActionView #:nodoc:
@first_render = template_path if @first_render.nil?
if use_full_path
- template_path_without_extension, template_extension = template_path.split('.')
+ template_path_without_extension, template_extension = path_and_extension(template_path)
if template_extension
template_file_name = full_template_path(template_path_without_extension, template_extension)
@@ -335,7 +335,7 @@ module ActionView #:nodoc:
end
def file_exists?(template_path)#:nodoc:
- template_file_name, template_file_extension = template_path.split(".")
+ template_file_name, template_file_extension = path_and_extension(template_path)
if template_file_extension
template_exists?(template_file_name, template_file_extension)
@@ -361,6 +361,11 @@ module ActionView #:nodoc:
@@method_names.has_key?(file_path) || FileTest.exists?(file_path)
end
+ def path_and_extension(template_path)
+ template_path_without_extension = template_path.sub(/\.(\w+)$/, '')
+ [ template_path_without_extension, $1 ]
+ end
+
# This method reads a template file.
def read_template_file(template_path, extension)
File.read(template_path)
diff --git a/actionpack/test/controller/new_render_test.rb b/actionpack/test/controller/new_render_test.rb
index 961269da59..0722bb9fd6 100644
--- a/actionpack/test/controller/new_render_test.rb
+++ b/actionpack/test/controller/new_render_test.rb
@@ -73,7 +73,17 @@ class NewRenderTestController < ActionController::Base
@secret = 'in the sauce'
render :file => 'test/render_file_with_ivar', :use_full_path => true
end
+
+ def render_file_not_using_full_path_with_relative_path
+ @secret = 'in the sauce'
+ render :file => 'test/../test/render_file_with_ivar', :use_full_path => true
+ end
+ def render_file_not_using_full_path_with_dot_in_path
+ @secret = 'in the sauce'
+ render :file => 'test/dot.directory/render_file_with_ivar', :use_full_path => true
+ end
+
def render_xml_hello
@name = "David"
render :template => "test/hello"
@@ -353,6 +363,16 @@ class NewRenderTest < Test::Unit::TestCase
assert_equal "The secret is in the sauce\n", @response.body
end
+ def test_render_file_not_using_full_path_with_relative_path
+ get :render_file_not_using_full_path_with_relative_path
+ assert_equal "The secret is in the sauce\n", @response.body
+ end
+
+ def test_render_file_not_using_full_path_with_dot_in_path
+ get :render_file_not_using_full_path_with_dot_in_path
+ assert_equal "The secret is in the sauce\n", @response.body
+ end
+
def test_render_file_with_locals
get :render_file_with_locals
assert_equal "The secret is in the sauce\n", @response.body
@@ -577,4 +597,4 @@ EOS
get :hello_world_from_rxml_using_action
assert_equal "<html>\n <p>Hello</p>\n</html>\n", @response.body
end
-end \ No newline at end of file
+end
diff --git a/actionpack/test/fixtures/test/dot.directory/render_file_with_ivar.rhtml b/actionpack/test/fixtures/test/dot.directory/render_file_with_ivar.rhtml
new file mode 100644
index 0000000000..8b8a449236
--- /dev/null
+++ b/actionpack/test/fixtures/test/dot.directory/render_file_with_ivar.rhtml
@@ -0,0 +1 @@
+The secret is <%= @secret %>