diff options
| author | Markus Heiser <markus.heiser@darmarit.de> | 2025-04-01 09:20:19 +0200 |
|---|---|---|
| committer | Markus Heiser <markus.heiser@darmarIT.de> | 2025-04-01 11:13:47 +0200 |
| commit | e6308b8167e28a7452e9b87d913c1279f43b130a (patch) | |
| tree | ae7173033d551191c344b7908be619f2fa668c2f /searx/result_types | |
| parent | 08885d0614f0b131a03f65af8bb4a601651dbacf (diff) | |
[fix] hardening against arguments of type None, where str or dict is expected
On a long-running server, the tracebacks below can be found (albeit rarely),
which indicate problems with NoneType where a string or another data type is
expected.
result.img_src::
File "/usr/local/searxng/searxng-src/searx/templates/simple/result_templates/images.html", line 13, in top-level template code
<img src="" data-src="{{ image_proxify(result.img_src) }}" alt="{{ result.title|striptags }}">{{- "" -}}
^
File "/usr/local/searxng/searxng-src/searx/webapp.py", line 284, in image_proxify
if url.startswith('//'):
^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'startswith'
result.content::
File "/usr/local/searxng/searxng-src/searx/result_types/_base.py", line 105, in _normalize_text_fields
result.content = WHITESPACE_REGEX.sub(" ", result.content).strip()
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
TypeError: expected string or bytes-like object, got 'NoneType'
html_to_text, when html_str is a NoneType::
File "/usr/local/searxng/searxng-src/searx/engines/wikipedia.py", line 190, in response
title = utils.html_to_text(api_result.get('titles', {}).get('display') or api_result.get('title'))
File "/usr/local/searxng/searxng-src/searx/utils.py", line 158, in html_to_text
html_str = html_str.replace('\n', ' ').replace('\r', ' ')
^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'replace'
presearch engine, when json_resp is a NoneType::
File "/usr/local/searxng/searxng-src/searx/engines/presearch.py", line 221, in response
results = parse_search_query(json_resp.get('results'))
File "/usr/local/searxng/searxng-src/searx/engines/presearch.py", line 161, in parse_search_query
for item in json_results.get('specialSections', {}).get('topStoriesCompact', {}).get('data', []):
^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Diffstat (limited to 'searx/result_types')
| -rw-r--r-- | searx/result_types/_base.py | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/searx/result_types/_base.py b/searx/result_types/_base.py index caf7e2a4f..ce846c3cf 100644 --- a/searx/result_types/_base.py +++ b/searx/result_types/_base.py @@ -103,8 +103,10 @@ def _normalize_text_fields(result: MainResult | LegacyResult): result.content = str(result) # normalize title and content - result.title = WHITESPACE_REGEX.sub(" ", result.title).strip() - result.content = WHITESPACE_REGEX.sub(" ", result.content).strip() + if result.title: + result.title = WHITESPACE_REGEX.sub(" ", result.title).strip() + if result.content: + result.content = WHITESPACE_REGEX.sub(" ", result.content).strip() if result.content == result.title: # avoid duplicate content between the content and title fields result.content = "" |