]> source.dussan.org Git - redmine.git/commitdiff
Fixes #820: invalid project id causes a NoMethodError in SearchController (Angel...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 12 Mar 2008 20:50:48 +0000 (20:50 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 12 Mar 2008 20:50:48 +0000 (20:50 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1237 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/application.rb
app/controllers/search_controller.rb
test/functional/search_controller_test.rb

index 7510d503ee6ec5adca67606063fce9fbc0a27513..98cb4a8272d8e89f6d1e04a4106bd46fa0dddf87 100644 (file)
@@ -102,13 +102,17 @@ class ApplicationController < ActionController::Base
   # make sure that the user is a member of the project (or admin) if project is private
   # used as a before_filter for actions that do not require any particular permission on the project
   def check_project_privacy
-    unless @project.active?
+    if @project && @project.active?
+      if @project.is_public? || User.current.member_of?(@project) || User.current.admin?
+        true
+      else
+        User.current.logged? ? render_403 : require_login
+      end
+    else
       @project = nil
       render_404
-      return false
+      false
     end
-    return true if @project.is_public? || User.current.member_of?(@project) || User.current.admin?
-    User.current.logged? ? render_403 : require_login
   end
 
   # store current uri in session.
index 69e1ee503cfc46ab77fdf359b343cd490027de0f..f15653b634fb181b6062e2cbb7cfa6d1df8e636a 100644 (file)
@@ -17,6 +17,8 @@
 
 class SearchController < ApplicationController
   layout 'base'
+  
+  before_filter :find_optional_project
 
   helper :messages
   include MessagesHelper
@@ -36,11 +38,6 @@ class SearchController < ApplicationController
       return
     end
     
-    if params[:id]
-      find_project
-      return unless check_project_privacy
-    end
-    
     if @project
       # only show what the user is allowed to view
       @object_types = %w(issues news documents changesets wiki_pages messages)
@@ -104,8 +101,10 @@ class SearchController < ApplicationController
   end
 
 private  
-  def find_project
+  def find_optional_project
+    return true unless params[:id]
     @project = Project.find(params[:id])
+    check_project_privacy
   rescue ActiveRecord::RecordNotFound
     render_404
   end
index 63f1097d6d3a4e149c98cbb4c836d0e332f6a93c..49004c7e677fe6f3a6e18717f397b56b70e51991 100644 (file)
@@ -78,6 +78,12 @@ class SearchControllerTest < Test::Unit::TestCase
     assert_equal 2, results.size
   end
   
+  def test_search_with_invalid_project_id
+    get :index, :id => 195, :q => 'recipe'
+    assert_response 404
+    assert_nil assigns(:results)
+  end
+
   def test_quick_jump_to_issue
     # issue of a public project
     get :index, :q => "3"