From a6e0c142ca8c4aacf1741eeeb58215a037578f91 Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk Date: Thu, 4 May 2023 17:38:24 -0600 Subject: [PATCH] kdk_handler.py: Fix matching --- CHANGELOG.md | 2 ++ resources/kdk_handler.py | 30 +++++++++++++++++++++--------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5b24f23a..51f28a5bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ - Allows for better identification when mounted (ex. Disk Utility while app is running) - Implement DMG-based PatcherSupportPkg system - Reduces both app size and root patching time +- Resolve incorrect remote KDK matching for macOS betas + - ex. Beta 4 KDK being recommended for Beta 3 install - Increment Binaries: - PatcherSupportPkg 1.0.0 - release diff --git a/resources/kdk_handler.py b/resources/kdk_handler.py index a7c69e72b..7e5f1ae09 100644 --- a/resources/kdk_handler.py +++ b/resources/kdk_handler.py @@ -179,16 +179,28 @@ class KernelDebugKitObject: return + # First check exact match for kdk in remote_kdk_version: - kdk_version = cast(packaging.version.Version, packaging.version.parse(kdk["version"])) - if (kdk["build"] == host_build): - self.kdk_url = kdk["url"] - self.kdk_url_build = kdk["build"] - self.kdk_url_version = kdk["version"] - self.kdk_url_expected_size = kdk["fileSize"] - self.kdk_url_is_exactly_match = True - break - if kdk_version <= parsed_version and kdk_version.major == parsed_version.major and (kdk_version.minor in range(parsed_version.minor - 1, parsed_version.minor + 1)): + if (kdk["build"] != host_build): + continue + self.kdk_url = kdk["url"] + self.kdk_url_build = kdk["build"] + self.kdk_url_version = kdk["version"] + self.kdk_url_expected_size = kdk["fileSize"] + self.kdk_url_is_exactly_match = True + break + + # If no exact match, check for closest match + if self.kdk_url == "": + for kdk in remote_kdk_version: + kdk_version = cast(packaging.version.Version, packaging.version.parse(kdk["version"])) + if kdk_version > parsed_version: + continue + if kdk_version.major != parsed_version.major: + continue + if kdk_version.minor not in range(parsed_version.minor - 1, parsed_version.minor + 1): + continue + # The KDK list is already sorted by version then date, so the first match is the closest self.kdk_closest_match_url = kdk["url"] self.kdk_closest_match_url_build = kdk["build"]