Browse Source

[fix] get_bang_url: handle ambiguous !!bangs without error

An ambiguous bang like `!!d` raises an exception in function get_bang_url().  A
bang is only unique when the bang_definition from get_bang_definition_and_ac() is
a string / for a ambiguous bang the returned bang_definition is a dictionary.

Reported-by: user prg at #searxng:matrix.org on 2022/01/11
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Markus Heiser 3 years ago
parent
commit
6d7e86eece
1 changed files with 5 additions and 2 deletions
  1. 5 2
      searx/external_bang.py

+ 5 - 2
searx/external_bang.py

@@ -77,11 +77,14 @@ def get_bang_url(search_query, external_bangs_db=None):
     :param search_query: This is a search_query object which contains preferences and the submitted queries.
     :param search_query: This is a search_query object which contains preferences and the submitted queries.
     :return: None if the bang was invalid, else a string of the redirect url.
     :return: None if the bang was invalid, else a string of the redirect url.
     """
     """
+    ret_val = None
+
     if external_bangs_db is None:
     if external_bangs_db is None:
         external_bangs_db = EXTERNAL_BANGS
         external_bangs_db = EXTERNAL_BANGS
 
 
     if search_query.external_bang:
     if search_query.external_bang:
         bang_definition, _ = get_bang_definition_and_ac(external_bangs_db, search_query.external_bang)
         bang_definition, _ = get_bang_definition_and_ac(external_bangs_db, search_query.external_bang)
-        return resolve_bang_definition(bang_definition, search_query.query)[0] if bang_definition else None
+        if bang_definition and isinstance(bang_definition, str):
+            ret_val = resolve_bang_definition(bang_definition, search_query.query)[0]
 
 
-    return None
+    return ret_val