diff --git a/config/initializers/ruby_version_compat.rb b/config/initializers/ruby_version_compat.rb index 1bd8ae37970..9d3e7253380 100644 --- a/config/initializers/ruby_version_compat.rb +++ b/config/initializers/ruby_version_compat.rb @@ -98,7 +98,7 @@ else o.force_encoding(Encoding::UTF_8) raise ActionController::InvalidByteSequenceErrorFromParams unless o.valid_encoding? end - if o.respond_to?(:original_filename) + if o.respond_to?(:original_filename) && o.original_filename o.original_filename.force_encoding(Encoding::UTF_8) raise ActionController::InvalidByteSequenceErrorFromParams unless o.original_filename.valid_encoding? end diff --git a/spec/initializers/ruby_version_compat_spec.rb b/spec/initializers/ruby_version_compat_spec.rb index dfa43cd79a4..f13ad180d09 100644 --- a/spec/initializers/ruby_version_compat_spec.rb +++ b/spec/initializers/ruby_version_compat_spec.rb @@ -20,4 +20,16 @@ describe 'ruby_version_compat' do output.should == ['', ''] end end + + describe "force_utf8_params" do + it "should allow null filenames through" do + testfile = ActionController::TestUploadedFile.new(File.join(File.dirname(__FILE__), "/../fixtures/scribd_docs/txt.txt"), "text/plain", true) + testfile.instance_variable_set(:@original_filename, nil) + controller = ApplicationController.new + controller.stubs(:params).returns({ :upload => { :file1 => testfile } }) + controller.stubs(:request).returns(mock(:path => "/upload")) + expect { controller.force_utf8_params() }.to_not raise_error + testfile.original_filename.should be_nil + end + end end