summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyleMiles <krm504@nyu.edu>2024-05-29 13:43:17 -0400
committerKyleMiles <krm504@nyu.edu>2024-06-14 15:26:02 -0400
commit8b0b1add74d6944b03d55ad7be2019f91a4a5ef3 (patch)
treeace0d61fc19decef0a650cbe597dc5a46f82480d
parent13122c55c87302fddee581add0642b5c4bd1a438 (diff)
Replace plugin minimum_version with minimum_version_info; Add maximum_version_info
-rw-r--r--binaryninjaapi.h3
-rw-r--r--binaryninjacore.h5
-rw-r--r--pluginmanager.cpp9
-rw-r--r--python/__init__.py42
-rw-r--r--python/pluginmanager.py19
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: