node-yara-rs

git clone git://archive.git.mtrnord.blog/MTRNord/node-yara-rs.git
Log | Files | Refs | README | LICENSE

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:
Msrc/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()) + } + } }