mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 09:42:07 +08:00
FIX: Handle uncaught exception (#11263)
After the search term is parsed for advanced search filters, the term may become empty. Later, the same term will be passed to Discourse.route_for which will raise an ArgumentError. > URI(nil) ArgumentError: bad argument (expected URI object or URI string)
This commit is contained in:
parent
c244214fe5
commit
9b7525bb03
|
@ -412,7 +412,7 @@ module Discourse
|
||||||
unless uri.is_a?(URI)
|
unless uri.is_a?(URI)
|
||||||
uri = begin
|
uri = begin
|
||||||
URI(uri)
|
URI(uri)
|
||||||
rescue URI::Error
|
rescue ArgumentError, URI::Error
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -266,14 +266,11 @@ class Search
|
||||||
if @term =~ /^\d+$/
|
if @term =~ /^\d+$/
|
||||||
single_topic(@term.to_i)
|
single_topic(@term.to_i)
|
||||||
else
|
else
|
||||||
begin
|
if route = Discourse.route_for(@term)
|
||||||
if route = Discourse.route_for(@term)
|
if route[:controller] == "topics" && route[:action] == "show"
|
||||||
if route[:controller] == "topics" && route[:action] == "show"
|
topic_id = (route[:id] || route[:topic_id]).to_i
|
||||||
topic_id = (route[:id] || route[:topic_id]).to_i
|
single_topic(topic_id) if topic_id > 0
|
||||||
single_topic(topic_id) if topic_id > 0
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
rescue ActionController::RoutingError
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -231,6 +231,11 @@ describe SearchController do
|
||||||
expect(SearchLog.where(term: 'wookie')).to be_blank
|
expect(SearchLog.where(term: 'wookie')).to be_blank
|
||||||
end
|
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
|
context 'rate limited' do
|
||||||
it 'rate limits anon searches per user' do
|
it 'rate limits anon searches per user' do
|
||||||
SiteSetting.rate_limit_search_anon_user = 2
|
SiteSetting.rate_limit_search_anon_user = 2
|
||||||
|
|
Loading…
Reference in New Issue
Block a user