diff --git a/lib/discourse.rb b/lib/discourse.rb index 636208587c..948cf9ac8d 100644 --- a/lib/discourse.rb +++ b/lib/discourse.rb @@ -412,7 +412,7 @@ module Discourse unless uri.is_a?(URI) uri = begin URI(uri) - rescue URI::Error + rescue ArgumentError, URI::Error end end diff --git a/lib/search.rb b/lib/search.rb index 7e7e5cfce4..c3f083b00f 100644 --- a/lib/search.rb +++ b/lib/search.rb @@ -266,14 +266,11 @@ class Search if @term =~ /^\d+$/ single_topic(@term.to_i) else - begin - if route = Discourse.route_for(@term) - if route[:controller] == "topics" && route[:action] == "show" - topic_id = (route[:id] || route[:topic_id]).to_i - single_topic(topic_id) if topic_id > 0 - end + if route = Discourse.route_for(@term) + if route[:controller] == "topics" && route[:action] == "show" + topic_id = (route[:id] || route[:topic_id]).to_i + single_topic(topic_id) if topic_id > 0 end - rescue ActionController::RoutingError end end end diff --git a/spec/requests/search_controller_spec.rb b/spec/requests/search_controller_spec.rb index 5d7181f7a8..990bc15d97 100644 --- a/spec/requests/search_controller_spec.rb +++ b/spec/requests/search_controller_spec.rb @@ -231,6 +231,11 @@ describe SearchController do expect(SearchLog.where(term: 'wookie')).to be_blank end + it "does not raise 500 with an empty term" do + get "/search/query.json", params: { term: "in:first", type_filter: "topic", search_for_id: true } + expect(response.status).to eq(200) + end + context 'rate limited' do it 'rate limits anon searches per user' do SiteSetting.rate_limit_search_anon_user = 2