From f2ee215becb62fb33dfb8e81ded65ec809a24a7f Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Tue, 15 Nov 2005 08:36:38 +0000 Subject: [PATCH] Stricter matching for implicitly multipart filenames excludes files ending in unsupported extensions (such as foo.rhtml.bak) and without a two-part content type (such as foo.text.rhtml or foo.text.really.plain.rhtml). Closes #2398. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3040 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionmailer/CHANGELOG | 5 +++++ actionmailer/lib/action_mailer/base.rb | 10 ++++++---- .../implicitly_multipart_example.ignored.rhtml | 1 + .../test_mailer/implicitly_multipart_example.rhtml.bak | 1 + 4 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.ignored.rhtml create mode 100644 actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.rhtml.bak diff --git a/actionmailer/CHANGELOG b/actionmailer/CHANGELOG index 7254016a612..45283d11a98 100644 --- a/actionmailer/CHANGELOG +++ b/actionmailer/CHANGELOG @@ -1,3 +1,8 @@ +*SVN* + +* Stricter matching for implicitly multipart filenames excludes files ending in unsupported extensions (such as foo.rhtml.bak) and without a two-part content type (such as foo.text.rhtml or foo.text.really.plain.rhtml). #2398 [Dave Burt , Jeremy Kemper] + + *1.1.3* (November 7th, 2005) * Allow Mailers to have custom initialize methods that set default instance variables for all mail actions #2563 [mrj@bigpond.net.au] diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index cc996790c8a..8659489808b 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -278,11 +278,13 @@ module ActionMailer if @parts.empty? templates = Dir.glob("#{template_path}/#{@template}.*") templates.each do |path| - type = (File.basename(path).split(".")[1..-2] || []).join("/") - next if type.empty? - @parts << Part.new(:content_type => type, + # TODO: don't hardcode rhtml|rxml + next unless md = /^([^\.]+)\.([^\.]+\.[^\+]+)\.(rhtml|rxml)$/.match(File.basename(path)) + template_name = "#{md.captures[0]}.#{md.captures[1]}" + content_type = md.captures[1].gsub('.', '/') + @parts << Part.new(:content_type => content_type, :disposition => "inline", :charset => charset, - :body => render_message(File.basename(path).split(".")[0..-2].join('.'), @body)) + :body => render_message(template_name, @body)) end unless @parts.empty? @content_type = "multipart/alternative" diff --git a/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.ignored.rhtml b/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.ignored.rhtml new file mode 100644 index 00000000000..6940419d47a --- /dev/null +++ b/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.ignored.rhtml @@ -0,0 +1 @@ +Ignored when searching for implicitly multipart parts. diff --git a/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.rhtml.bak b/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.rhtml.bak new file mode 100644 index 00000000000..6940419d47a --- /dev/null +++ b/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.rhtml.bak @@ -0,0 +1 @@ +Ignored when searching for implicitly multipart parts.