Skip to content

Commit 037d3c2

Browse files
committed
Replace plugin minimum_version with minimum_version_info; Add maximum_version_info
1 parent 1d393ba commit 037d3c2

File tree

5 files changed

+45
-33
lines changed

5 files changed

+45
-33
lines changed

binaryninjaapi.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -15794,7 +15794,8 @@ namespace BinaryNinja {
1579415794
std::string GetCommit() const;
1579515795
std::string GetRepository() const;
1579615796
std::string GetProjectData();
15797-
uint64_t GetMinimumVersion() const;
15797+
BNVersionInfo GetMinimumVersionInfo() const;
15798+
BNVersionInfo GetMaximumVersionInfo() const;
1579815799
uint64_t GetLastUpdate();
1579915800
bool IsBeingDeleted() const;
1580015801
bool IsBeingUpdated() const;

binaryninjacore.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -6686,7 +6686,10 @@ extern "C"
66866686
BINARYNINJACOREAPI const char* BNPluginGetDescription(BNRepoPlugin* p);
66876687
BINARYNINJACOREAPI const char* BNPluginGetLicenseText(BNRepoPlugin* p);
66886688
BINARYNINJACOREAPI const char* BNPluginGetLongdescription(BNRepoPlugin* p);
6689-
BINARYNINJACOREAPI uint64_t BNPluginGetMinimumVersion(BNRepoPlugin* p);
6689+
BINARYNINJACOREAPI BNVersionInfo BNPluginGetMinimumVersionInfo(BNRepoPlugin* p);
6690+
BINARYNINJACOREAPI BNVersionInfo BNPluginGetMaximumVersionInfo(BNRepoPlugin* p);
6691+
BINARYNINJACOREAPI BNVersionInfo BNParseVersionString(const char* v);
6692+
BINARYNINJACOREAPI bool BNVersionLessThan(const BNVersionInfo smaller, const BNVersionInfo larger);
66906693
BINARYNINJACOREAPI const char* BNPluginGetName(BNRepoPlugin* p);
66916694
BINARYNINJACOREAPI const char* BNPluginGetProjectUrl(BNRepoPlugin* p);
66926695
BINARYNINJACOREAPI const char* BNPluginGetPackageUrl(BNRepoPlugin* p);

pluginmanager.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,14 @@ string RepoPlugin::GetLongdescription() const
8080
RETURN_STRING(BNPluginGetLongdescription(m_object));
8181
}
8282

83-
uint64_t RepoPlugin::GetMinimumVersion() const
83+
BNVersionInfo RepoPlugin::GetMinimumVersionInfo() const
8484
{
85-
return BNPluginGetMinimumVersion(m_object);
85+
return BNPluginGetMinimumVersionInfo(m_object);
86+
}
87+
88+
BNVersionInfo RepoPlugin::GetMaximumVersionInfo() const
89+
{
90+
return BNPluginGetMaximumVersionInfo(m_object);
8691
}
8792

8893
string RepoPlugin::GetName() const

python/__init__.py

+16-26
Original file line numberDiff line numberDiff line change
@@ -132,19 +132,13 @@ def __init__(self, major, minor = None, build = None, channel = None):
132132
self.build = 0
133133
self.channel = ""
134134
if isinstance(major, str) and minor is None and build is None and channel is None:
135-
# Coerce a version string into an object
136-
try:
137-
# Intentionally doing separately to opportunistically match what we can
138-
self.major = int(major.split(".")[0])
139-
self.minor = int(major.split(".")[1])
140-
build = major.split(".")[2]
141-
if "-" in build:
142-
self.build = int(build.split("-")[0])
143-
self.channel = build.split("-")[1]
144-
self.build = int(build)
145-
except:
146-
pass
147-
pass
135+
core_version_info = core.BNParseVersionString(major)
136+
self.major = core_version_info.major
137+
self.minor = core_version_info.minor
138+
self.build = core_version_info.build
139+
if core_version_info.channel is not None:
140+
self.channel = core_version_info.channel
141+
core.BNFreeString(core_version_info.channel)
148142
else:
149143
self.major = major
150144
if minor is not None:
@@ -167,19 +161,15 @@ def __eq__(self, other):
167161
return False
168162

169163
def _versionCompare(self, other):
170-
if int(self.major) < int(other.major):
171-
return True
172-
if int(self.major) > int(other.major):
173-
return False
174-
if int(self.minor) < int(other.minor):
175-
return True
176-
if int(self.minor) > int(other.minor):
177-
return False
178-
if int(self.build) < int(other.build):
179-
return True
180-
if int(self.build) > int(other.build):
181-
return False
182-
return False #equal
164+
a = core.BNVersionInfo()
165+
a.major = self.major
166+
a.minor = self.minor
167+
a.build = self.build
168+
b = core.BNVersionInfo()
169+
b.major = other.major
170+
b.minor = other.minor
171+
b.build = other.build
172+
return core.BNVersionLessThan(a, b)
183173

184174
def __lt__(self, other):
185175
if isinstance(other, CoreVersionInfo):

python/pluginmanager.py

+16-3
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
from datetime import datetime, date
2424
from typing import List, Dict, Optional
2525

26-
# Binary Ninja components
2726
import binaryninja
2827
from . import _binaryninjacore as core
28+
from . import deprecation
2929
from .enums import PluginType
3030

3131

@@ -140,10 +140,23 @@ def long_description(self) -> Optional[str]:
140140
"""String long description of the plugin"""
141141
return core.BNPluginGetLongdescription(self.handle)
142142

143+
@deprecation.deprecated(deprecated_in="4.0.5366", details='Use :py:func:`minimum_version_info` instead.')
143144
@property
144145
def minimum_version(self) -> int:
145-
"""String minimum version the plugin was tested on"""
146-
return core.BNPluginGetMinimumVersion(self.handle)
146+
"""Minimum version the plugin was tested on"""
147+
return self.minimum_version_info.build
148+
149+
@property
150+
def minimum_version_info(self) -> 'binaryninja.CoreVersionInfo':
151+
"""Minimum version info the plugin was tested on"""
152+
core_version_info = core.BNPluginGetMinimumVersionInfo(self.handle)
153+
return binaryninja.CoreVersionInfo(core_version_info.major, core_version_info.minor, core_version_info.build)
154+
155+
@property
156+
def maximum_version_info(self) -> 'binaryninja.CoreVersionInfo':
157+
"""Maximum version info the plugin will support"""
158+
core_version_info = core.BNPluginGetMaximumVersionInfo(self.handle)
159+
return binaryninja.CoreVersionInfo(core_version_info.major, core_version_info.minor, core_version_info.build)
147160

148161
@property
149162
def name(self) -> str:

0 commit comments

Comments
 (0)