FIX: Handle uncaught exception (#11263)

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)

diff --git a/lib/discourse.rb b/lib/discourse.rb
index 6362085..948cf9a 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 7e7e5cf..c3f083b 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 5d7181f..990bc15 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

GitHub sha: 9b7525bb

This commit appears in #11263 which was approved by nbianca. It was merged by udan11.