diff options
| author | Josh Ferrell <josh@vector35.com> | 2023-03-29 15:41:59 -0400 |
|---|---|---|
| committer | Josh Ferrell <josh@vector35.com> | 2023-03-29 15:41:59 -0400 |
| commit | f270c5099ace1ae496257841a5bdff4bc36f01c1 (patch) | |
| tree | 15f6ba3fd8f9906ed0b51715837648f835c218af /python/scriptingprovider.py | |
| parent | 8d791bc9eb608139c6fd9d99ab0d96ed37561d3a (diff) | |
Add support for warnings to ScriptingInstance
Diffstat (limited to 'python/scriptingprovider.py')
| -rw-r--r-- | python/scriptingprovider.py | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/python/scriptingprovider.py b/python/scriptingprovider.py index 06ac9170..e18a906a 100644 --- a/python/scriptingprovider.py +++ b/python/scriptingprovider.py @@ -44,10 +44,12 @@ from . import settings from . import binaryview from . import basicblock from . import function -from .log import log_info, log_error, is_output_redirected_to_log +from .log import log_info, log_warn, log_error, is_output_redirected_to_log from .pluginmanager import RepositoryManager from .enums import ScriptingProviderExecuteResult, ScriptingProviderInputReadyState +_WARNING_REGEX = re.compile(r'^\S+:\d+: \w+Warning: ') + class _ThreadActionContext: _actions = [] @@ -76,6 +78,7 @@ class ScriptingOutputListener: self._cb = core.BNScriptingOutputListener() self._cb.context = 0 self._cb.output = self._cb.output.__class__(self._output) + self._cb.warning = self._cb.warning.__class__(self._warning) self._cb.error = self._cb.error.__class__(self._error) self._cb.inputReadyStateChanged = self._cb.inputReadyStateChanged.__class__(self._input_ready_state_changed) core.BNRegisterScriptingInstanceOutputListener(handle, self._cb) @@ -89,6 +92,13 @@ class ScriptingOutputListener: except: log_error(traceback.format_exc()) + def _warning(self, ctxt, text): + try: + self.notify_warning(text) + except: + log_error(traceback.format_exc()) + + def _error(self, ctxt, text): try: self.notify_error(text) @@ -104,6 +114,9 @@ class ScriptingOutputListener: def notify_output(self, text): pass + def notify_warning(self, text): + pass + def notify_error(self, text): pass @@ -293,6 +306,9 @@ class ScriptingInstance: def output(self, text): core.BNNotifyOutputForScriptingInstance(self.handle, text) + def warning(self, text): + core.BNNotifyWarningForScriptingInstance(self.handle, text) + def error(self, text): core.BNNotifyErrorForScriptingInstance(self.handle, text) @@ -421,9 +437,9 @@ class ScriptingProvider(metaclass=_ScriptingProviderMetaclass): class _PythonScriptingInstanceOutput: - def __init__(self, orig, is_error): + def __init__(self, orig, is_error_output): self.orig = orig - self.is_error = is_error + self.is_error_output = is_error_output self.buffer = "" self.encoding = 'UTF-8' self.errors = None @@ -485,8 +501,11 @@ class _PythonScriptingInstanceOutput: line = self.buffer[:i] self.buffer = self.buffer[i + 1:] - if self.is_error: - log_error(line) + if self.is_error_output: + if _WARNING_REGEX.match(line): + log_warn(line) + else: + log_error(line) else: log_info(line) else: @@ -494,8 +513,11 @@ class _PythonScriptingInstanceOutput: else: PythonScriptingInstance._interpreter.value = None try: - if self.is_error: - interpreter.instance.error(data) + if self.is_error_output: + if _WARNING_REGEX.match(data): + interpreter.instance.warning(data) + else: + interpreter.instance.error(data) else: interpreter.instance.output(data) finally: |
