From cc89e4aaad1864dfc0ed78421cc523cea553782e Mon Sep 17 00:00:00 2001 From: Iain Beeston Date: Mon, 3 Oct 2011 18:18:19 +0200 Subject: [PATCH] Escaped strings that are inserted into regexps during interpolation --- lib/paperclip/interpolations.rb | 2 +- test/interpolations_test.rb | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/paperclip/interpolations.rb b/lib/paperclip/interpolations.rb index f05d204f5..942637c9e 100644 --- a/lib/paperclip/interpolations.rb +++ b/lib/paperclip/interpolations.rb @@ -86,7 +86,7 @@ def class attachment = nil, style_name = nil # Returns the basename of the file. e.g. "file" for "file.jpg" def basename attachment, style_name - attachment.original_filename.gsub(/#{File.extname(attachment.original_filename)}$/, "") + attachment.original_filename.gsub(/#{Regexp.escape(File.extname(attachment.original_filename))}$/, "") end # Returns the extension of the file. e.g. "jpg" for "file.jpg" diff --git a/test/interpolations_test.rb b/test/interpolations_test.rb index 8dd385d85..dc392bde8 100644 --- a/test/interpolations_test.rb +++ b/test/interpolations_test.rb @@ -154,6 +154,13 @@ def url(*args) attachment.stubs(:original_filename).returns("one") assert_equal "one", Paperclip::Interpolations.filename(attachment, :style) end + + should "return the basename when the extension contains regexp special characters" do + attachment = mock + attachment.stubs(:styles).returns({}) + attachment.stubs(:original_filename).returns("one.ab)") + assert_equal "one", Paperclip::Interpolations.basename(attachment, :style) + end should "return the timestamp" do now = Time.now