From c6b94775c722bf604b8cc2416d40b46ae8d374ec Mon Sep 17 00:00:00 2001 From: "Victor M. Alvarez" Date: Wed, 27 May 2026 12:47:39 +0200 Subject: [PATCH 1/8] refactor: use BitVec for fast-scan patterns Switches the `fast_scan_patterns` fields in the `Compiler` and `Rules` structs from `Vec` to `bitvec::vec::BitVec`. This significantly reduces memory footprint by storing boolean flags more efficiently (one bit per boolean instead of one byte). --- Cargo.lock | 1 + lib/Cargo.toml | 2 +- lib/src/compiler/mod.rs | 6 +++--- lib/src/compiler/rules.rs | 14 ++++++++++++-- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 83ab1dc91..d376a4e72 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -316,6 +316,7 @@ checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", + "serde", "tap", "wyz", ] diff --git a/lib/Cargo.toml b/lib/Cargo.toml index 7a7c5fa9c..a2c5a25bb 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -270,7 +270,7 @@ hex = { workspace = true } base64 = { workspace = true } bincode = { workspace = true, features = ["serde"] } bitflags = { workspace = true, features = ["serde"] } -bitvec = { workspace = true } +bitvec = { workspace = true, features = ["serde"] } bstr = { workspace = true, features = ["serde"] } const-oid = { workspace = true, optional = true, features = ["db"] } crc32fast = { workspace = true, optional = true } diff --git a/lib/src/compiler/mod.rs b/lib/src/compiler/mod.rs index 0e4d9fde2..9f49a9c06 100644 --- a/lib/src/compiler/mod.rs +++ b/lib/src/compiler/mod.rs @@ -346,7 +346,7 @@ pub struct Compiler<'a> { /// Vector where the N-th boolean indicates whether the pattern with /// PatternId = N is a fast-scan pattern. - fast_scan_patterns: Vec, + fast_scan_patterns: bitvec::vec::BitVec, /// Map used for de-duplicating pattern. Keys are the pattern's IR and /// values are the `PatternId` assigned to each pattern. Every time a rule @@ -487,7 +487,7 @@ impl<'a> Compiler<'a> { error_on_slow_pattern: false, error_on_slow_loop: false, next_pattern_id: PatternId(0), - fast_scan_patterns: Vec::new(), + fast_scan_patterns: bitvec::vec::BitVec::new(), current_namespace: default_namespace, features: FxHashSet::default(), warnings: Warnings::default(), @@ -1732,7 +1732,7 @@ impl Compiler<'_> { }; if !pattern.fast_scan_allowed() { - self.fast_scan_patterns[usize::from(pattern_id)] = false; + self.fast_scan_patterns.set(usize::from(pattern_id), false); } let kind = match pattern.pattern() { diff --git a/lib/src/compiler/rules.rs b/lib/src/compiler/rules.rs index 5131d8280..c532169a3 100644 --- a/lib/src/compiler/rules.rs +++ b/lib/src/compiler/rules.rs @@ -164,7 +164,17 @@ pub struct Rules { /// in the source code, allowing them to be compiled into a unified /// set automata for single-pass evaluation. pub(in crate::compiler) regex_sets: FxHashMap>, - pub(in crate::compiler) fast_scan_patterns: Vec, + + /// BitVec where the N-th bit indicates whether the pattern with + /// PatternId = N is a fast-scan pattern. + /// + /// A pattern can be fast-scanned if its occurrences are only evaluated + /// as simple boolean checks (e.g. `$a`), meaning the scanner can stop + /// tracking matches for it once the first match has been found. If a + /// pattern is used in a context that requires tracking all matches (such + /// as count `#a`, offset `@a`, length `!a`, anchored checks, or loop + /// equivalents), it cannot be fast-scanned. + pub(in crate::compiler) fast_scan_patterns: bitvec::vec::BitVec, } impl Rules { @@ -569,7 +579,7 @@ impl Rules { #[inline] pub(crate) fn is_fast_scan(&self, pattern_id: PatternId) -> bool { - self.fast_scan_patterns[usize::from(pattern_id)] + *self.fast_scan_patterns.get(usize::from(pattern_id)).unwrap() } } From 8127f20ace0528951e955ff12c2de2336c3119ea Mon Sep 17 00:00:00 2001 From: "Victor M. Alvarez" Date: Wed, 27 May 2026 12:50:59 +0200 Subject: [PATCH 2/8] chore: upgrade dependencies. --- Cargo.lock | 64 +++++++++++++++++++++-------------------------- cli/Cargo.toml | 6 ++--- macros/Cargo.toml | 6 ++--- py/Cargo.toml | 4 +-- 4 files changed, 36 insertions(+), 44 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d376a4e72..f7079beff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -176,9 +176,9 @@ dependencies = [ [[package]] name = "assert_cmd" -version = "2.1.2" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c5bcfa8749ac45dd12cb11055aeeb6b27a3895560d60d71e3c23bf979e60514" +checksum = "2aa3a22042e45de04255c7bf3626e239f450200fd0493c1e382263544b20aea6" dependencies = [ "anstyle", "bstr", @@ -191,12 +191,11 @@ dependencies = [ [[package]] name = "assert_fs" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652f6cb1f516886fcfee5e7a5c078b9ade62cfcb889524efe5a64d682dd27a9" +checksum = "6ecf5c70ca07b7f80220bce936f0556a960ca6fb00fc2bd4125b5e581b218137" dependencies = [ "anstyle", - "doc-comment", "globwalk", "predicates", "predicates-core", @@ -405,9 +404,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chardetng" -version = "0.1.17" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14b8f0b65b7b08ae3c8187e8d77174de20cb6777864c6b832d8ad365999cf1ea" +checksum = "13de944a44b5064ee5d3a5ceccc49a41bfec50f2580e66f82e87703acdb88b53" dependencies = [ "cfg-if", "encoding_rs", @@ -895,9 +894,9 @@ checksum = "9d87f75bbe32ee10609201e09e818537df81c3acb436be2b78f47cc85d139475" [[package]] name = "darling" -version = "0.20.11" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ "darling_core", "darling_macro", @@ -905,11 +904,10 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.11" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" dependencies = [ - "fnv", "ident_case", "proc-macro2", "quote", @@ -919,9 +917,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.11" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core", "quote", @@ -1038,12 +1036,6 @@ dependencies = [ "syn", ] -[[package]] -name = "doc-comment" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "780955b8b195a21ab8e4ac6b60dd1dbdcec1dc6c51c0617964b08c81785e12c9" - [[package]] name = "document-features" version = "0.2.12" @@ -2410,15 +2402,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" +checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" [[package]] name = "predicates-tree" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" dependencies = [ "predicates-core", "termtree", @@ -2543,9 +2535,9 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf85e27e86080aafd5a22eae58a162e133a589551542b3e5cee4beb27e54f8e1" +checksum = "91fd8e38a3b50ed1167fb981cd6fd60147e091784c427b8f7183a7ee32c31c12" dependencies = [ "libc", "once_cell", @@ -2557,18 +2549,18 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf94ee265674bf76c09fa430b0e99c26e319c945d96ca0d5a8215f31bf81cf7" +checksum = "e368e7ddfdeb98c9bca7f8383be1648fd84ab466bf2bc015e94008db6d35611e" dependencies = [ "target-lexicon", ] [[package]] name = "pyo3-ffi" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "491aa5fc66d8059dd44a75f4580a2962c1862a1c2945359db36f6c2818b748dc" +checksum = "7f29e10af80b1f7ccaf7f69eace800a03ecd13e883acfacc1e5d0988605f651e" dependencies = [ "libc", "pyo3-build-config", @@ -2576,9 +2568,9 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d671734e9d7a43449f8480f8b38115df67bef8d21f76837fa75ee7aaa5e52e" +checksum = "df6e520eff47c45997d2fc7dd8214b25dd1310918bbb2642156ef66a67f29813" dependencies = [ "proc-macro2", "pyo3-macros-backend", @@ -2588,9 +2580,9 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22faaa1ce6c430a1f71658760497291065e6450d7b5dc2bcf254d49f66ee700a" +checksum = "c4cdc218d835738f81c2338f822078af45b4afdf8b2e33cbb5916f108b813acb" dependencies = [ "heck", "proc-macro2", @@ -3215,9 +3207,9 @@ checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" [[package]] name = "tempfile" -version = "3.23.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", "getrandom 0.3.4", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 733f47592..467e3a61a 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -73,7 +73,7 @@ yara-x-proto-yaml = { workspace = true } yara-x-proto-json = { workspace = true } yara-x-fmt = { workspace = true } -chardetng = "0.1.17" +chardetng = "1.0.0" crossbeam = "0.8.4" crossterm = "0.29.0" dunce = "1.0.5" @@ -83,6 +83,6 @@ unicode-width = "0.2.2" wild = "2.2.1" [dev-dependencies] -assert_cmd = "2.1.2" -assert_fs = "1.1.3" +assert_cmd = "2.2.2" +assert_fs = "1.1.4" predicates = { workspace = true } \ No newline at end of file diff --git a/macros/Cargo.toml b/macros/Cargo.toml index 38be41805..ddba513ee 100644 --- a/macros/Cargo.toml +++ b/macros/Cargo.toml @@ -12,7 +12,7 @@ rust-version.workspace = true proc-macro = true [dependencies] -darling = "0.20.11" -syn = { version = "2.0.103", features = ["full", "derive", "parsing", "visit"] } +darling = "0.23.0" +syn = { version = "2.0.117", features = ["full", "derive", "parsing", "visit"] } quote = "1.0" -proc-macro2 = "1.0.95" \ No newline at end of file +proc-macro2 = "1.0.106" \ No newline at end of file diff --git a/py/Cargo.toml b/py/Cargo.toml index 828f1ed3f..76ee8d809 100644 --- a/py/Cargo.toml +++ b/py/Cargo.toml @@ -55,7 +55,7 @@ default = [ [dependencies] base64 = { workspace = true } protobuf = { workspace = true } -pyo3 = { version = "0.28.2", features = [ +pyo3 = { version = "0.28.3", features = [ "abi3", "abi3-py38", "extension-module", @@ -71,4 +71,4 @@ yara-x-fmt = { workspace = true } yara-x-parser = { workspace = true } [build-dependencies] -pyo3-build-config = "0.28.2" +pyo3-build-config = "0.28.3" From 2a94bf731266d50538b0019adcef55a73f719f15 Mon Sep 17 00:00:00 2001 From: "Victor M. Alvarez" Date: Wed, 27 May 2026 13:04:48 +0200 Subject: [PATCH 3/8] fix: adapt to API changes in `chardetng`. When upgrading `chardetng` to version 1.0.0 our code got broken due to API changes. --- cli/src/commands/fix.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cli/src/commands/fix.rs b/cli/src/commands/fix.rs index 7b98d5bbf..562d7a810 100644 --- a/cli/src/commands/fix.rs +++ b/cli/src/commands/fix.rs @@ -124,14 +124,17 @@ pub fn exec_fix_encoding( })?; // Detect the original encoding. - let mut detector = chardetng::EncodingDetector::new(); + let mut detector = chardetng::EncodingDetector::new( + chardetng::Iso2022JpDetection::Allow, + ); detector.feed(src.as_slice(), true); // Decode the source file as UTF-8. `invalid_chars` will be true // if some character could not be encoded as UTF-8 and was replaced // by the replacement character. - let (src_utf8, encoding, invalid_chars) = - detector.guess(None, true).decode(src.as_slice()); + let (src_utf8, encoding, invalid_chars) = detector + .guess(None, chardetng::Utf8Detection::Allow) + .decode(src.as_slice()); // Re-write the source as UTF-8, except if --dry-run was used or // the original source was not modified at all. From 297ceb97982f3cbb9bcbaafa271a3cd1c5548063 Mon Sep 17 00:00:00 2001 From: "Victor M. Alvarez" Date: Wed, 27 May 2026 13:13:09 +0200 Subject: [PATCH 4/8] feat: add `--fast-scan` option to CLI. Introduces the `-f`/`--fast-scan` command-line option for the `yr scan` command. --- cli/src/commands/scan.rs | 8 ++++++++ cli/src/help.rs | 11 +++++++++++ cli/src/tests/scan.rs | 22 ++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/cli/src/commands/scan.rs b/cli/src/commands/scan.rs index 124af617e..57740feee 100644 --- a/cli/src/commands/scan.rs +++ b/cli/src/commands/scan.rs @@ -62,6 +62,9 @@ pub fn scan() -> Command { .help("Print only the number of matches per file"), arg!(--"disable-console-logs") .help("Disable printing console log messages"), + arg!(-f --"fast-scan") + .help("Enable fast-scan mode") + .long_help(help::FAST_SCAN_LONG_HELP), arg!(--"max-matches-per-pattern" ) .help("Maximum number of matches per pattern") .long_help(help::MAX_MATCHES_PER_PATTERN_LONG_HELP) @@ -181,6 +184,7 @@ pub fn exec_scan(args: &ArgMatches, config: &Config) -> anyhow::Result<()> { let scan_list = args.get_flag("scan-list"); let recursive = args.get_one::("recursive"); let no_mmap = args.get_flag("no-mmap"); + let fast_scan = args.get_flag("fast-scan"); let max_matches_per_pattern = args.get_one::("max-matches-per-pattern"); @@ -311,6 +315,10 @@ pub fn exec_scan(args: &ArgMatches, config: &Config) -> anyhow::Result<()> { scanner.use_mmap(false); } + if fast_scan { + scanner.fast_scan(true); + } + if let Some(max_matches_per_pattern) = max_matches_per_pattern { scanner.max_matches_per_pattern(*max_matches_per_pattern); } diff --git a/cli/src/help.rs b/cli/src/help.rs index 58176c18b..a6e31e622 100644 --- a/cli/src/help.rs +++ b/cli/src/help.rs @@ -8,6 +8,17 @@ pub const COMPILED_RULES_LONG_HELP: &str = r#"Indicate that is a fi YARA rules can be compiled with the `yr compile` command. The file produced by this command can be passed later to `yr scan` by using this flag."#; +pub const FAST_SCAN_LONG_HELP: &str = r#"Enable fast-scan mode + +In fast-scan mode, scanning is optimized for speed by avoiding tracking multiple +matches for patterns when they are only used in simple boolean checks. The scanner +stops tracking matches for a pattern as soon as the first match is found, provided +that the pattern is not used in any context that requires knowing all occurrences +(like #a, @a, !a). + +As a consequence, options like `--print-strings` won't output all matching patterns, +but only the first occurrence of some of the patterns."#; + pub const COMPLETION_LONG_HELP: &str = r#"Output shell completion code for the specified shell Examples: diff --git a/cli/src/tests/scan.rs b/cli/src/tests/scan.rs index 5b0c732a1..00f1a3b85 100644 --- a/cli/src/tests/scan.rs +++ b/cli/src/tests/scan.rs @@ -419,3 +419,25 @@ fn json_output_single_meta_not_array() { assert!(meta["int"].is_i64()); assert!(meta["float"].is_f64()); } + +#[test] +fn fast_scan() { + Command::new(cargo_bin!("yr")) + .arg("scan") + .arg("--fast-scan") + .arg("src/tests/testdata/foo.yar") + .arg("src/tests/testdata/dummy.file") + .assert() + .success() + .stdout(predicate::str::contains("foo src/tests/testdata/dummy.file")); + + Command::new(cargo_bin!("yr")) + .arg("scan") + .arg("-f") + .arg("src/tests/testdata/foo.yar") + .arg("src/tests/testdata/dummy.file") + .assert() + .success() + .stdout(predicate::str::contains("foo src/tests/testdata/dummy.file")); +} + From 7f30a73b87e0d4c172053d6656f3bb62d25a777e Mon Sep 17 00:00:00 2001 From: "Victor M. Alvarez" Date: Wed, 27 May 2026 13:14:54 +0200 Subject: [PATCH 5/8] style: run `cargo fmt`. --- cli/src/tests/scan.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/cli/src/tests/scan.rs b/cli/src/tests/scan.rs index 00f1a3b85..66e2041b8 100644 --- a/cli/src/tests/scan.rs +++ b/cli/src/tests/scan.rs @@ -440,4 +440,3 @@ fn fast_scan() { .success() .stdout(predicate::str::contains("foo src/tests/testdata/dummy.file")); } - From 3a203647edc15b77671adcc9201e4d29db39a2e3 Mon Sep 17 00:00:00 2001 From: "Victor M. Alvarez" Date: Wed, 27 May 2026 15:48:41 +0200 Subject: [PATCH 6/8] fix: correct bitsquatting non-ASCII character check The previous implementation contained a typo, checking `next_a.is_ascii()` twice. This prevented `next_b` from being correctly validated for ASCII characters, leading to incorrect behavior when one of the differing characters was non-ASCII. --- lib/src/modules/vt/bitsquatting.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/src/modules/vt/bitsquatting.rs b/lib/src/modules/vt/bitsquatting.rs index 175b5f7be..0326ced2e 100644 --- a/lib/src/modules/vt/bitsquatting.rs +++ b/lib/src/modules/vt/bitsquatting.rs @@ -11,7 +11,7 @@ pub fn bitsquatting(a: &str, b: &str) -> bool { match (next_a, next_b) { (Some(next_a), Some(next_b)) => { if next_a != next_b { - if !next_a.is_ascii() || !next_a.is_ascii() { + if !next_a.is_ascii() || !next_b.is_ascii() { return false; } let xor = next_a as u8 ^ next_b as u8; @@ -37,5 +37,8 @@ mod tests { assert!(bitsquatting("aa", "qa")); assert!(bitsquatting("aaa", "aqa")); assert!(!bitsquatting("aaa", "aqq")); + + assert!(!bitsquatting("a", "á")); + assert!(!bitsquatting("á", "a")); } } From 4901877e76fdb3125ed112107d741b04a96bcd50 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 May 2026 15:49:16 +0200 Subject: [PATCH 7/8] chore(deps-dev): bump tmp from 0.2.5 to 0.2.6 in /ls/editors/code (#661) Bumps [tmp](https://github.com/raszi/node-tmp) from 0.2.5 to 0.2.6. - [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md) - [Commits](https://github.com/raszi/node-tmp/compare/v0.2.5...v0.2.6) --- updated-dependencies: - dependency-name: tmp dependency-version: 0.2.6 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- ls/editors/code/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ls/editors/code/package-lock.json b/ls/editors/code/package-lock.json index a1e53d192..07410a8bd 100644 --- a/ls/editors/code/package-lock.json +++ b/ls/editors/code/package-lock.json @@ -3650,9 +3650,9 @@ } }, "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-5sJPdPjfI5Kx+qbrDesxkglRBxW//g7hCsqspEjwkewGvBMGIKMOTKzLt1hFVJzyadba3lDUN20O9qhvbQUSTA==", "dev": true, "license": "MIT", "engines": { From e0096cd41fe16be76ca5321618ac880d1894b086 Mon Sep 17 00:00:00 2001 From: "Victor M. Alvarez" Date: Wed, 27 May 2026 16:04:18 +0200 Subject: [PATCH 8/8] chore: bump version to 1.17.0. --- Cargo.lock | 24 ++++++++++++------------ Cargo.toml | 16 ++++++++-------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f7079beff..14fa731f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4348,7 +4348,7 @@ dependencies = [ [[package]] name = "yara-x" -version = "1.16.0" +version = "1.17.0" dependencies = [ "annotate-snippets", "anyhow", @@ -4423,7 +4423,7 @@ dependencies = [ [[package]] name = "yara-x-capi" -version = "1.16.0" +version = "1.17.0" dependencies = [ "assert-call", "cbindgen", @@ -4433,7 +4433,7 @@ dependencies = [ [[package]] name = "yara-x-cli" -version = "1.16.0" +version = "1.17.0" dependencies = [ "anyhow", "ascii_tree", @@ -4473,7 +4473,7 @@ dependencies = [ [[package]] name = "yara-x-fmt" -version = "1.16.0" +version = "1.17.0" dependencies = [ "bitflags 2.11.1", "bstr", @@ -4487,7 +4487,7 @@ dependencies = [ [[package]] name = "yara-x-js" -version = "1.16.0" +version = "1.17.0" dependencies = [ "getrandom 0.2.17", "js-sys", @@ -4503,7 +4503,7 @@ dependencies = [ [[package]] name = "yara-x-ls" -version = "1.16.0" +version = "1.17.0" dependencies = [ "async-lsp", "bitflags 2.11.1", @@ -4533,7 +4533,7 @@ dependencies = [ [[package]] name = "yara-x-macros" -version = "1.16.0" +version = "1.17.0" dependencies = [ "darling", "proc-macro2", @@ -4543,7 +4543,7 @@ dependencies = [ [[package]] name = "yara-x-parser" -version = "1.16.0" +version = "1.17.0" dependencies = [ "anyhow", "ascii_tree", @@ -4566,7 +4566,7 @@ dependencies = [ [[package]] name = "yara-x-proto" -version = "1.16.0" +version = "1.17.0" dependencies = [ "protobuf", "protobuf-codegen", @@ -4574,7 +4574,7 @@ dependencies = [ [[package]] name = "yara-x-proto-json" -version = "1.16.0" +version = "1.17.0" dependencies = [ "base64", "globwalk", @@ -4588,7 +4588,7 @@ dependencies = [ [[package]] name = "yara-x-proto-yaml" -version = "1.16.0" +version = "1.17.0" dependencies = [ "chrono", "globwalk", @@ -4602,7 +4602,7 @@ dependencies = [ [[package]] name = "yara-x-py" -version = "1.16.0" +version = "1.17.0" dependencies = [ "base64", "protobuf", diff --git a/Cargo.toml b/Cargo.toml index 475841739..d71ccd4ab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace.package] -version = "1.16.0" +version = "1.17.0" authors = ["Victor M. Alvarez "] edition = "2024" homepage = "https://virustotal.github.io/yara-x" @@ -109,13 +109,13 @@ wasm-opt = "0.116.1" wasmtime = { version = "43.0.2", default-features = false } x509-parser = "0.18.0" yansi = "1.0.1" -yara-x = { path = "lib", version = "1.16.0" } -yara-x-fmt = { path = "fmt", version = "1.16.0" } -yara-x-macros = { path = "macros", version = "1.16.0" } -yara-x-parser = { path = "parser", version = "1.16.0" } -yara-x-proto = { path = "proto", version = "1.16.0"} -yara-x-proto-yaml = { path = "proto-yaml", version = "1.16.0" } -yara-x-proto-json = { path = "proto-json", version = "1.16.0" } +yara-x = { path = "lib", version = "1.17.0" } +yara-x-fmt = { path = "fmt", version = "1.17.0" } +yara-x-macros = { path = "macros", version = "1.17.0" } +yara-x-parser = { path = "parser", version = "1.17.0" } +yara-x-proto = { path = "proto", version = "1.17.0"} +yara-x-proto-yaml = { path = "proto-yaml", version = "1.17.0" } +yara-x-proto-json = { path = "proto-json", version = "1.17.0" } zip = { version = "8.2.0", default-features = false } simd-adler32 = "0.3.9" simd_cesu8 = "1.1.1"