From 1a3611f9db7b099ebde1b9e2faea01cde468937e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Vinot?= Date: Sun, 16 Feb 2025 23:27:24 +0100 Subject: [PATCH] Fix: avoid exception on broken tree, reduce logging on known broken trees --- lookyloo/indexing.py | 5 +++++ website/web/__init__.py | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lookyloo/indexing.py b/lookyloo/indexing.py index 1078ed15..df817508 100644 --- a/lookyloo/indexing.py +++ b/lookyloo/indexing.py @@ -172,6 +172,11 @@ def index_capture(self, uuid_to_index: str, directory: Path) -> None: except (TreeNeedsRebuild, NoValidHarFile) as e: self.logger.warning(f'Error loading the pickle for {uuid_to_index}: {e}') + except AttributeError as e: + # Happens when indexing the IPs, they were a list, and are now dict. + # Skip from the the warning logs. + self.logger.info(f'Error during indexing for {uuid_to_index}, recreate pickle: {e}') + remove_pickle_tree(directory) except Exception as e: self.logger.error(f'Error during indexing for {uuid_to_index}, recreate pickle: {e}') remove_pickle_tree(directory) diff --git a/website/web/__init__.py b/website/web/__init__.py index 7237ddd9..fd85c272 100644 --- a/website/web/__init__.py +++ b/website/web/__init__.py @@ -2013,7 +2013,13 @@ def urlnode_urls_in_rendered_content(tree_uuid: str, node_uuid: str) -> Response @app.route('/tree//url//rendered_content', methods=['GET']) @file_response # type: ignore[misc] def urlnode_rendered_content(tree_uuid: str, node_uuid: str) -> Response | None: - urlnode = lookyloo.get_urlnode_from_tree(tree_uuid, node_uuid) + try: + urlnode = lookyloo.get_urlnode_from_tree(tree_uuid, node_uuid) + except IndexError: + to_send = b"Unable to find rendered content, the tree seem to be broken. Please reload the page and try again." + lookyloo.remove_pickle(tree_uuid) + return send_file(BytesIO(to_send), mimetype='text/plain', + as_attachment=True, download_name='rendered_content.txt') if not urlnode.rendered_html: return None return send_file(BytesIO(urlnode.rendered_html.getvalue()), mimetype='text/plain',