From 6c0c870074538bf9fac28c7a1d1a81ec50d99c50 Mon Sep 17 00:00:00 2001 From: 0cyn Date: Sat, 25 Apr 2026 15:18:38 -0400 Subject: [PATCH] Re-add license text field to API --- binaryninjaapi.h | 1 + binaryninjacore.h | 1 + pluginmanager.cpp | 5 +++++ python/pluginmanager.py | 2 +- rust/src/repository/plugin.rs | 7 +++++++ rust/tests/repository.rs | 1 + 6 files changed, 16 insertions(+), 1 deletion(-) diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 1c482b6649..af9992fdd5 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -19201,6 +19201,7 @@ namespace BinaryNinja { std::string GetPluginDirectory() const; std::string GetAuthor() const; std::string GetDescription() const; + std::string GetLicenseText() const; std::string GetName() const; std::vector GetPluginTypes() const; std::string GetPackageUrl() const; diff --git a/binaryninjacore.h b/binaryninjacore.h index 446391e170..cec95ec984 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -7970,6 +7970,7 @@ extern "C" BINARYNINJACOREAPI char** BNPluginGetApis(BNPlugin* p, size_t* count); BINARYNINJACOREAPI const char* BNPluginGetAuthor(BNPlugin* p); BINARYNINJACOREAPI const char* BNPluginGetDescription(BNPlugin* p); + BINARYNINJACOREAPI const char* BNPluginGetLicenseText(BNPlugin* p); BINARYNINJACOREAPI BNVersionInfo BNPluginGetMinimumVersionInfo(BNPlugin* p); BINARYNINJACOREAPI BNVersionInfo BNPluginGetMaximumVersionInfo(BNPlugin* p); BINARYNINJACOREAPI BNVersionInfo BNParseVersionString(const char* v); diff --git a/pluginmanager.cpp b/pluginmanager.cpp index 9b24a464f7..bfa0dfb9d7 100644 --- a/pluginmanager.cpp +++ b/pluginmanager.cpp @@ -70,6 +70,11 @@ string Extension::GetDescription() const RETURN_STRING(BNPluginGetDescription(m_object)); } +string Extension::GetLicenseText() const +{ + RETURN_STRING(BNPluginGetLicenseText(m_object)); +} + static VersionInfo ConvertVersionInfo(const BNVersionInfo& coreInfo) { VersionInfo result; diff --git a/python/pluginmanager.py b/python/pluginmanager.py index 55315d1223..32d410ea25 100644 --- a/python/pluginmanager.py +++ b/python/pluginmanager.py @@ -154,7 +154,7 @@ def description(self) -> Optional[str]: @deprecation.deprecated(deprecated_in="5.3", details='This field will be removed.') def license_text(self) -> Optional[str]: """String complete license text for the given plugin""" - return '' + return core.BNPluginGetLicenseText(self.handle) @property def long_description(self) -> Optional[str]: diff --git a/rust/src/repository/plugin.rs b/rust/src/repository/plugin.rs index ac7c9d2079..1abee1e863 100644 --- a/rust/src/repository/plugin.rs +++ b/rust/src/repository/plugin.rs @@ -103,6 +103,13 @@ impl Extension { unsafe { BnString::into_string(result as *mut c_char) } } + /// String complete license text for the given plugin + pub fn license_text(&self) -> String { + let result = unsafe { BNPluginGetLicenseText(self.handle.as_ptr()) }; + assert!(!result.is_null()); + unsafe { BnString::into_string(result as *mut c_char) } + } + /// Minimum version info the plugin was tested on pub fn minimum_version_info(&self) -> VersionInfo { let result = unsafe { BNPluginGetMinimumVersionInfo(self.handle.as_ptr()) }; diff --git a/rust/tests/repository.rs b/rust/tests/repository.rs index ac861b2cde..d22f900d95 100644 --- a/rust/tests/repository.rs +++ b/rust/tests/repository.rs @@ -20,6 +20,7 @@ fn test_list() { for plugin in &plugins { let plugin_path = plugin.path(); let plugin_by_path = repository.plugin_by_path(&plugin_path).unwrap(); + let _license_text = plugin.license_text(); assert_eq!(plugin.package_url(), plugin_by_path.package_url()); } }