From bb314029391d42dec6c9e14fddbe5a01ec5d94fc Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 20 Jan 2013 13:03:55 +0000 Subject: [PATCH] Fix 500 error for requests to the settings path for non-configurable plugins (#12911). Path by Harry Garrood. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11216 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/settings_controller.rb | 5 +++++ test/functional/settings_controller_test.rb | 22 ++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb index 7748b2a1d..3f48d1f75 100644 --- a/app/controllers/settings_controller.rb +++ b/app/controllers/settings_controller.rb @@ -52,6 +52,11 @@ class SettingsController < ApplicationController def plugin @plugin = Redmine::Plugin.find(params[:id]) + unless @plugin.configurable? + render_404 + return + end + if request.post? Setting.send "plugin_#{@plugin.id}=", params[:settings] flash[:notice] = l(:notice_successful_update) diff --git a/test/functional/settings_controller_test.rb b/test/functional/settings_controller_test.rb index 5ae5d09fc..df4abd6b7 100644 --- a/test/functional/settings_controller_test.rb +++ b/test/functional/settings_controller_test.rb @@ -101,11 +101,31 @@ class SettingsControllerTest < ActionController::TestCase assert_response 404 end + def test_get_non_configurable_plugin_settings + Redmine::Plugin.register(:foo) {} + + get :plugin, :id => 'foo' + assert_response 404 + + Redmine::Plugin.clear + end + def test_post_plugin_settings Setting.expects(:plugin_foo=).with({'sample_setting' => 'Value'}).returns(true) - Redmine::Plugin.register(:foo) {} + Redmine::Plugin.register(:foo) do + settings :partial => 'not blank' # so that configurable? is true + end post :plugin, :id => 'foo', :settings => {'sample_setting' => 'Value'} assert_redirected_to '/settings/plugin/foo' end + + def test_post_non_configurable_plugin_settings + Redmine::Plugin.register(:foo) {} + + post :plugin, :id => 'foo', :settings => {'sample_setting' => 'Value'} + assert_response 404 + + Redmine::Plugin.clear + end end