diff --git a/Cargo.lock b/Cargo.lock index 83c76ea..25869ab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -450,6 +450,18 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "auditable-serde" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7bf8143dfc3c0258df908843e169b5cc5fcf76c7718bd66135ef4a9cd558c5" +dependencies = [ + "semver", + "serde", + "serde_json", + "topological-sort", +] + [[package]] name = "autocfg" version = "1.4.0" @@ -2652,7 +2664,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -3268,7 +3280,7 @@ dependencies = [ [[package]] name = "objdiff-cli" -version = "3.0.0-beta.2" +version = "3.0.0-beta.3" dependencies = [ "anyhow", "argp", @@ -3291,7 +3303,7 @@ dependencies = [ [[package]] name = "objdiff-core" -version = "3.0.0-beta.2" +version = "3.0.0-beta.3" dependencies = [ "anyhow", "arm-attr", @@ -3344,7 +3356,7 @@ dependencies = [ [[package]] name = "objdiff-gui" -version = "3.0.0-beta.2" +version = "3.0.0-beta.3" dependencies = [ "anyhow", "cfg-if", @@ -3380,7 +3392,7 @@ dependencies = [ [[package]] name = "objdiff-wasm" -version = "3.0.0-beta.2" +version = "3.0.0-beta.3" dependencies = [ "log", "objdiff-core", @@ -4474,6 +4486,9 @@ name = "semver" version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" +dependencies = [ + "serde", +] [[package]] name = "serde" @@ -5165,6 +5180,12 @@ dependencies = [ "winnow 0.7.3", ] +[[package]] +name = "topological-sort" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea68304e134ecd095ac6c3574494fc62b909f416c4fca77e440530221e549d3d" + [[package]] name = "tower" version = "0.5.2" @@ -5537,9 +5558,9 @@ dependencies = [ [[package]] name = "wasm-encoder" -version = "0.225.0" +version = "0.227.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f7eac0445cac73bcf09e6a97f83248d64356dccf9f2b100199769b6b42464e5" +checksum = "80bb72f02e7fbf07183443b27b0f3d4144abf8c114189f2e088ed95b696a7822" dependencies = [ "leb128fmt", "wasmparser", @@ -5547,11 +5568,13 @@ dependencies = [ [[package]] name = "wasm-metadata" -version = "0.225.0" +version = "0.227.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1d20d0bf2c73c32a5114cf35a5c10ccf9f9aa37a3a2c0114b3e11cbf6faac12" +checksum = "ce1ef0faabbbba6674e97a56bee857ccddf942785a336c8b47b42373c922a91d" dependencies = [ "anyhow", + "auditable-serde", + "flate2", "indexmap", "serde", "serde_derive", @@ -5577,9 +5600,9 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.225.0" +version = "0.227.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36e5456165f81e64cb9908a0fe9b9d852c2c74582aa3fe2be3c2da57f937d3ae" +checksum = "0f51cad774fb3c9461ab9bccc9c62dfb7388397b5deda31bf40e8108ccd678b2" dependencies = [ "bitflags 2.9.0", "hashbrown", @@ -6300,19 +6323,19 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.39.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4dd9a372b25d6f35456b0a730d2adabeb0c4878066ba8f8089800349be6ecb5" +checksum = "8e7091ed6c9abfa4e0a2ef3b39d0539da992d841fcf32c255f64fb98764ffee5" dependencies = [ - "wit-bindgen-rt 0.39.0", + "wit-bindgen-rt 0.40.0", "wit-bindgen-rust-macro", ] [[package]] name = "wit-bindgen-core" -version = "0.39.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f108fa9b77a346372858b30c11ea903680e7e2b9d820b1a5883e9d530bf51c7e" +checksum = "398c650cec1278cfb72e214ba26ef3440ab726e66401bd39c04f465ee3979e6b" dependencies = [ "anyhow", "heck", @@ -6330,18 +6353,18 @@ dependencies = [ [[package]] name = "wit-bindgen-rt" -version = "0.39.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +checksum = "68faed92ae696b93ea9a7b67ba6c37bf09d72c6d9a70fa824a743c3020212f11" dependencies = [ "bitflags 2.9.0", ] [[package]] name = "wit-bindgen-rust" -version = "0.39.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ba5b852e976d35dbf6cb745746bf1bd4fc26782bab1e0c615fc71a7d8aac05" +checksum = "83903c8dcd8084a8a67ae08190122cf0e25dc37bdc239070a00f47e22d3f0aae" dependencies = [ "anyhow", "heck", @@ -6355,9 +6378,9 @@ dependencies = [ [[package]] name = "wit-bindgen-rust-macro" -version = "0.39.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "401529c9af9304a20ed99fa01799e467b7d37727126f0c9a958895471268ad7a" +checksum = "a7bf7f20495bcc7dc9f24c5fbcac9e919ca5ebdb7a1b1841d74447d3c8dd0c60" dependencies = [ "anyhow", "prettyplease", @@ -6370,9 +6393,9 @@ dependencies = [ [[package]] name = "wit-component" -version = "0.225.0" +version = "0.227.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2505c917564c1d74774563bbcd3e4f8c216a6508050862fd5f449ee56e3c5125" +checksum = "635c3adc595422cbf2341a17fb73a319669cc8d33deed3a48368a841df86b676" dependencies = [ "anyhow", "bitflags 2.9.0", @@ -6414,9 +6437,9 @@ dependencies = [ [[package]] name = "wit-parser" -version = "0.225.0" +version = "0.227.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebefaa234e47224f10ce60480c5bfdece7497d0f3b87a12b41ff39e5c8377a78" +checksum = "ddf445ed5157046e4baf56f9138c124a0824d4d1657e7204d71886ad8ce2fc11" dependencies = [ "anyhow", "id-arena", diff --git a/Cargo.toml b/Cargo.toml index 86b6bcb..a2678fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ strip = "debuginfo" codegen-units = 1 [workspace.package] -version = "3.0.0-beta.2" +version = "3.0.0-beta.3" authors = ["Luke Street "] edition = "2024" license = "MIT OR Apache-2.0" diff --git a/objdiff-core/src/diff/display.rs b/objdiff-core/src/diff/display.rs index 48a04a0..0048915 100644 --- a/objdiff-core/src/diff/display.rs +++ b/objdiff-core/src/diff/display.rs @@ -563,7 +563,7 @@ pub fn instruction_hover( out } -#[derive(Copy, Clone)] +#[derive(Debug, Copy, Clone)] pub enum SymbolFilter<'a> { None, Search(&'a Regex), diff --git a/objdiff-wasm/Cargo.toml b/objdiff-wasm/Cargo.toml index a85c9e3..bd2aa52 100644 --- a/objdiff-wasm/Cargo.toml +++ b/objdiff-wasm/Cargo.toml @@ -24,7 +24,7 @@ std = ["objdiff-core/std"] [dependencies] log = { version = "0.4", default-features = false } -regex = { version = "1.11", default-features = false } +regex = { version = "1.11", default-features = false, features = ["unicode-case"] } [dependencies.objdiff-core] path = "../objdiff-core" @@ -35,7 +35,7 @@ features = ["arm", "arm64", "mips", "ppc", "x86", "dwarf"] talc = { version = "4.4", default-features = false, features = ["lock_api"] } [target.'cfg(target_os = "wasi")'.dependencies] -wit-bindgen = { version = "0.39", default-features = false, features = ["macros"] } +wit-bindgen = { version = "0.40", default-features = false, features = ["macros"] } [build-dependencies] wit-deps = "0.5" diff --git a/objdiff-wasm/package-lock.json b/objdiff-wasm/package-lock.json index 86563cf..d51510f 100644 --- a/objdiff-wasm/package-lock.json +++ b/objdiff-wasm/package-lock.json @@ -1,12 +1,12 @@ { "name": "objdiff-wasm", - "version": "3.0.0-alpha.3", + "version": "3.0.0-beta.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "objdiff-wasm", - "version": "3.0.0-alpha.3", + "version": "3.0.0-beta.3", "license": "MIT OR Apache-2.0", "devDependencies": { "@biomejs/biome": "^1.9.3", diff --git a/objdiff-wasm/package.json b/objdiff-wasm/package.json index 0215ecf..80e93c7 100644 --- a/objdiff-wasm/package.json +++ b/objdiff-wasm/package.json @@ -1,6 +1,6 @@ { "name": "objdiff-wasm", - "version": "3.0.0-beta.2", + "version": "3.0.0-beta.3", "description": "A local diffing tool for decompilation projects.", "author": { "name": "Luke Street", diff --git a/objdiff-wasm/src/api.rs b/objdiff-wasm/src/api.rs index 90ec812..3b28f2f 100644 --- a/objdiff-wasm/src/api.rs +++ b/objdiff-wasm/src/api.rs @@ -8,7 +8,7 @@ use alloc::{ use core::cell::RefCell; use objdiff_core::{diff, obj}; -use regex::RegexBuilder; +use regex::{Regex, RegexBuilder}; use super::logging; @@ -86,19 +86,31 @@ impl GuestDiff for Component { } } +fn build_regex(s: &str) -> Option { + if s.is_empty() { + return None; + } + let e = match RegexBuilder::new(s).case_insensitive(true).build() { + Ok(regex) => return Some(regex), + Err(e) => e, + }; + // Use the string as a literal if the regex fails to compile + let escaped = regex::escape(s); + if let Ok(regex) = RegexBuilder::new(&escaped).case_insensitive(true).build() { + return Some(regex); + } + // Use the original error if the escaped string also fails + log::warn!("Failed to compile regex: {}", e); + None +} + impl GuestDisplay for Component { fn display_sections( diff: ObjectDiffBorrow, filter: SymbolFilter, config: DisplayConfig, ) -> Vec { - let regex = filter.regex.as_ref().and_then(|s| { - RegexBuilder::new(s).case_insensitive(true).build().ok().or_else(|| { - // Use the string as a literal if the regex fails to compile - let escaped = regex::escape(s); - RegexBuilder::new(&escaped).case_insensitive(true).build().ok() - }) - }); + let regex = filter.regex.as_deref().and_then(build_regex); let filter = if let Some(mapping) = filter.mapping { diff::display::SymbolFilter::Mapping(mapping as usize, regex.as_ref()) } else if let Some(regex) = ®ex {