diff options
| author | KyleMiles <krm504@nyu.edu> | 2024-05-29 13:43:17 -0400 |
|---|---|---|
| committer | KyleMiles <krm504@nyu.edu> | 2024-06-14 15:26:02 -0400 |
| commit | 8b0b1add74d6944b03d55ad7be2019f91a4a5ef3 (patch) | |
| tree | ace0d61fc19decef0a650cbe597dc5a46f82480d | |
| parent | 13122c55c87302fddee581add0642b5c4bd1a438 (diff) | |
Replace plugin minimum_version with minimum_version_info; Add maximum_version_info
| -rw-r--r-- | binaryninjaapi.h | 3 | ||||
| -rw-r--r-- | binaryninjacore.h | 5 | ||||
| -rw-r--r-- | pluginmanager.cpp | 9 | ||||
| -rw-r--r-- | python/__init__.py | 42 | ||||
| -rw-r--r-- | python/pluginmanager.py | 19 |
5 files changed, 45 insertions, 33 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index fb2d8347..c0a94960 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -15794,7 +15794,8 @@ namespace BinaryNinja { std::string GetCommit() const; std::string GetRepository() const; std::string GetProjectData(); - uint64_t GetMinimumVersion() const; + BNVersionInfo GetMinimumVersionInfo() const; + BNVersionInfo GetMaximumVersionInfo() const; uint64_t GetLastUpdate(); bool IsBeingDeleted() const; bool IsBeingUpdated() const; diff --git a/binaryninjacore.h b/binaryninjacore.h index 229cb40c..9abf6d77 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -6688,7 +6688,10 @@ extern "C" BINARYNINJACOREAPI const char* BNPluginGetDescription(BNRepoPlugin* p); BINARYNINJACOREAPI const char* BNPluginGetLicenseText(BNRepoPlugin* p); BINARYNINJACOREAPI const char* BNPluginGetLongdescription(BNRepoPlugin* p); - BINARYNINJACOREAPI uint64_t BNPluginGetMinimumVersion(BNRepoPlugin* p); + BINARYNINJACOREAPI BNVersionInfo BNPluginGetMinimumVersionInfo(BNRepoPlugin* p); + BINARYNINJACOREAPI BNVersionInfo BNPluginGetMaximumVersionInfo(BNRepoPlugin* p); + BINARYNINJACOREAPI BNVersionInfo BNParseVersionString(const char* v); + BINARYNINJACOREAPI bool BNVersionLessThan(const BNVersionInfo smaller, const BNVersionInfo larger); BINARYNINJACOREAPI const char* BNPluginGetName(BNRepoPlugin* p); BINARYNINJACOREAPI const char* BNPluginGetProjectUrl(BNRepoPlugin* p); BINARYNINJACOREAPI const char* BNPluginGetPackageUrl(BNRepoPlugin* p); diff --git a/pluginmanager.cpp b/pluginmanager.cpp index 98671e2e..84024a0f 100644 --- a/pluginmanager.cpp +++ b/pluginmanager.cpp @@ -80,9 +80,14 @@ string RepoPlugin::GetLongdescription() const RETURN_STRING(BNPluginGetLongdescription(m_object)); } -uint64_t RepoPlugin::GetMinimumVersion() const +BNVersionInfo RepoPlugin::GetMinimumVersionInfo() const { - return BNPluginGetMinimumVersion(m_object); + return BNPluginGetMinimumVersionInfo(m_object); +} + +BNVersionInfo RepoPlugin::GetMaximumVersionInfo() const +{ + return BNPluginGetMaximumVersionInfo(m_object); } string RepoPlugin::GetName() const diff --git a/python/__init__.py b/python/__init__.py index fd4e1eaa..3c440c8b 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -132,19 +132,13 @@ class CoreVersionInfo: self.build = 0 self.channel = "" if isinstance(major, str) and minor is None and build is None and channel is None: - # Coerce a version string into an object - try: - # Intentionally doing separately to opportunistically match what we can - self.major = int(major.split(".")[0]) - self.minor = int(major.split(".")[1]) - build = major.split(".")[2] - if "-" in build: - self.build = int(build.split("-")[0]) - self.channel = build.split("-")[1] - self.build = int(build) - except: - pass - pass + core_version_info = core.BNParseVersionString(major) + self.major = core_version_info.major + self.minor = core_version_info.minor + self.build = core_version_info.build + if core_version_info.channel is not None: + self.channel = core_version_info.channel + core.BNFreeString(core_version_info.channel) else: self.major = major if minor is not None: @@ -167,19 +161,15 @@ class CoreVersionInfo: return False def _versionCompare(self, other): - if int(self.major) < int(other.major): - return True - if int(self.major) > int(other.major): - return False - if int(self.minor) < int(other.minor): - return True - if int(self.minor) > int(other.minor): - return False - if int(self.build) < int(other.build): - return True - if int(self.build) > int(other.build): - return False - return False #equal + a = core.BNVersionInfo() + a.major = self.major + a.minor = self.minor + a.build = self.build + b = core.BNVersionInfo() + b.major = other.major + b.minor = other.minor + b.build = other.build + return core.BNVersionLessThan(a, b) def __lt__(self, other): if isinstance(other, CoreVersionInfo): diff --git a/python/pluginmanager.py b/python/pluginmanager.py index d7474440..237ab9fb 100644 --- a/python/pluginmanager.py +++ b/python/pluginmanager.py @@ -23,9 +23,9 @@ import json from datetime import datetime, date from typing import List, Dict, Optional -# Binary Ninja components import binaryninja from . import _binaryninjacore as core +from . import deprecation from .enums import PluginType @@ -140,10 +140,23 @@ class RepoPlugin: """String long description of the plugin""" return core.BNPluginGetLongdescription(self.handle) + @deprecation.deprecated(deprecated_in="4.0.5366", details='Use :py:func:`minimum_version_info` instead.') @property def minimum_version(self) -> int: - """String minimum version the plugin was tested on""" - return core.BNPluginGetMinimumVersion(self.handle) + """Minimum version the plugin was tested on""" + return self.minimum_version_info.build + + @property + def minimum_version_info(self) -> 'binaryninja.CoreVersionInfo': + """Minimum version info the plugin was tested on""" + core_version_info = core.BNPluginGetMinimumVersionInfo(self.handle) + return binaryninja.CoreVersionInfo(core_version_info.major, core_version_info.minor, core_version_info.build) + + @property + def maximum_version_info(self) -> 'binaryninja.CoreVersionInfo': + """Maximum version info the plugin will support""" + core_version_info = core.BNPluginGetMaximumVersionInfo(self.handle) + return binaryninja.CoreVersionInfo(core_version_info.major, core_version_info.minor, core_version_info.build) @property def name(self) -> str: |
