From 200e26d9065c1bfe9c569e6422e2b66dab765b09 Mon Sep 17 00:00:00 2001 From: tek Date: Thu, 8 Dec 2022 11:57:08 +0100 Subject: [PATCH] Fixes a bug in shortcut parsing #296 --- mvt/ios/modules/mixed/shortcuts.py | 40 ++++++++++++++++-------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/mvt/ios/modules/mixed/shortcuts.py b/mvt/ios/modules/mixed/shortcuts.py index ce3bc74..8151067 100644 --- a/mvt/ios/modules/mixed/shortcuts.py +++ b/mvt/ios/modules/mixed/shortcuts.py @@ -104,29 +104,33 @@ class Shortcuts(IOSExtraction): for index, value in enumerate(item): shortcut[names[index]] = value - action_data = plistlib.load(io.BytesIO( - shortcut.pop("action_data", []))) - actions = [] - for action_entry in action_data: - action = {} - action["identifier"] = action_entry["WFWorkflowActionIdentifier"] - action["parameters"] = action_entry["WFWorkflowActionParameters"] + try: + action_data = plistlib.load(io.BytesIO( + shortcut.pop("action_data", []))) + actions = [] + for action_entry in action_data: + action = {} + action["identifier"] = action_entry["WFWorkflowActionIdentifier"] + action["parameters"] = action_entry["WFWorkflowActionParameters"] - # URLs might be in multiple fields, do a simple regex search - # across the parameters. - extracted_urls = check_for_links(str(action["parameters"])) + # URLs might be in multiple fields, do a simple regex search + # across the parameters. + extracted_urls = check_for_links(str(action["parameters"])) - # Remove quoting characters that may have been captured by the - # regex. - action["urls"] = [url.rstrip("',") for url in extracted_urls] - actions.append(action) + # Remove quoting characters that may have been captured by the + # regex. + action["urls"] = [url.rstrip("',") for url in extracted_urls] + actions.append(action) + shortcut["parsed_actions"] = len(actions) + shortcut["action_urls"] = list(itertools.chain( + *[action["urls"] for action in actions])) + except plistlib.InvalidFileException: + self.log.debug("Shortcut without action data") + shortcut["action_urls"] = None + shortcut["parsed_actions"] = 0 shortcut["isodate"] = convert_mactime_to_iso(shortcut.pop("created_date")) shortcut["modified_date"] = convert_mactime_to_iso(shortcut["modified_date"]) - shortcut["parsed_actions"] = len(actions) - shortcut["action_urls"] = list(itertools.chain( - *[action["urls"] for action in actions])) - self.results.append(shortcut) cur.close()