commit d3b52a3adf4adbc79abeaa1adcd10e396569a6fd
parent d11da2946b0c3f2c68fd2f2bf05348196ae3c079
Author: MTRNord <mtrnord1@gmail.com>
Date: Sun, 1 Oct 2023 16:53:31 +0200
Allow defining variables in the scanner
Diffstat:
| M | src/lib.rs | | | 44 | +++++++++++++++++++++++++++++++++++++++++++- |
1 file changed, 43 insertions(+), 1 deletion(-)
diff --git a/src/lib.rs b/src/lib.rs
@@ -1,7 +1,7 @@
#![deny(clippy::all)]
use napi::{
- anyhow::Context,
+ anyhow::{anyhow, Context},
bindgen_prelude::{Buffer, Reference, SharedReference},
Env, Result,
};
@@ -292,4 +292,46 @@ impl YaraScanner {
Ok(self.convert_yara_results(results))
}
+
+ #[napi]
+ pub fn define_variable(
+ &mut self,
+ identifier: String,
+ string_value: Option<String>,
+ integer_value: Option<i64>,
+ float_value: Option<f64>,
+ bool_value: Option<bool>,
+ ) -> Result<()> {
+ if let Some(string_value) = string_value {
+ Ok(
+ self
+ .scanner
+ .define_variable(&identifier, string_value.as_str())
+ .context(format!("Failed to define string variable: {identifier}"))?,
+ )
+ } else if let Some(bool_value) = bool_value {
+ Ok(
+ self
+ .scanner
+ .define_variable(&identifier, bool_value)
+ .context(format!("Failed to define bool variable: {identifier}"))?,
+ )
+ } else if let Some(float_value) = float_value {
+ Ok(
+ self
+ .scanner
+ .define_variable(&identifier, float_value)
+ .context(format!("Failed to define float variable: {identifier}"))?,
+ )
+ } else if let Some(integer_value) = integer_value {
+ Ok(
+ self
+ .scanner
+ .define_variable(&identifier, integer_value)
+ .context(format!("Failed to define integer variable: {identifier}"))?,
+ )
+ } else {
+ Err(anyhow!("You must at least define one of the value types!").into())
+ }
+ }
}