diff --git a/openandroidinstaller/utils.py b/openandroidinstaller/utils.py index 4a16062f..eb503f9f 100644 --- a/openandroidinstaller/utils.py +++ b/openandroidinstaller/utils.py @@ -84,6 +84,8 @@ def retrieve_image_metadata(image_path: str) -> dict: ].decode("utf-8") logger.info(f"Metadata retrieved from image {image_path.split('/')[-1]}.") return metadata_dict + except zipfile.BadZipFile as e: + raise e except (FileNotFoundError, KeyError): logger.error( f"Metadata file {metapath} not found in {image_path.split('/')[-1]}." @@ -107,12 +109,12 @@ def image_sdk_level(image_path: str) -> int: Returns: Android version as integer. """ - metadata = retrieve_image_metadata(image_path) try: + metadata = retrieve_image_metadata(image_path) sdk_level = metadata["post-sdk-level"] logger.info(f"Android version of {image_path}: {sdk_level}") return int(sdk_level) - except (ValueError, TypeError, KeyError) as e: + except (ValueError, TypeError, KeyError, zipfile.BadZipFile) as e: logger.error(f"Could not determine Android version of {image_path}. Error: {e}") return -1 @@ -129,8 +131,8 @@ def image_works_with_device( Returns: CheckResult object containing the compatibility status and a message. """ - metadata = retrieve_image_metadata(image_path) try: + metadata = retrieve_image_metadata(image_path) supported_devices = metadata["pre-device"].split(",") logger.info(f"Image works with the following device(s): {supported_devices}") if any(code in supported_devices for code in supported_device_codes): @@ -145,6 +147,12 @@ def image_works_with_device( CompatibilityStatus.INCOMPATIBLE, f"Image file {image_path.split('/')[-1]} is not supported by device code.", ) + except zipfile.BadZipFile: + logger.error("Selected image is not a zip file.") + return CheckResult( + CompatibilityStatus.INCOMPATIBLE, + f"Selected image {image_path.split('/')[-1]} is not a zip file.", + ) except KeyError: logger.error( f"Could not determine supported devices for {image_path.split('/')[-1]}."