Skip to content

Commit b27e3a8

Browse files
author
Avgor46
committed
Update casr + full libcasr
1 parent c2689e7 commit b27e3a8

File tree

3 files changed

+49
-64
lines changed

3 files changed

+49
-64
lines changed

casr/tests/tests.rs

Lines changed: 41 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
extern crate copy_dir;
2-
extern crate lazy_static;
32
extern crate regex;
43
extern crate serde_json;
54

@@ -12,19 +11,25 @@ use std::fs;
1211
use std::io::Write;
1312
use std::path::{Path, PathBuf};
1413
use std::process::{Command, Stdio};
15-
use std::sync::{LazyLock};
16-
17-
static EXE_CASR_CORE: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-core"));
18-
static EXE_CASR_AFL: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-afl"));
19-
static EXE_CASR_LIBFUZZER: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-libfuzzer"));
20-
static EXE_CASR_CLUSTER: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-cluster"));
21-
static EXE_CASR_SAN: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-san"));
22-
static EXE_CASR_UBSAN: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-ubsan"));
23-
static EXE_CASR_PYTHON: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-python"));
24-
static EXE_CASR_JAVA: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-java"));
25-
static EXE_CASR_JS: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-js"));
26-
static EXE_CASR_GDB: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-gdb"));
27-
static PROJECT_DIR: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_MANIFEST_DIR"));
14+
use std::sync::LazyLock;
15+
16+
static EXE_CASR_CORE: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-core"));
17+
static EXE_CASR_AFL: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-afl"));
18+
static EXE_CASR_LIBFUZZER: LazyLock<&'static str> =
19+
LazyLock::new(|| env!("CARGO_BIN_EXE_casr-libfuzzer"));
20+
static EXE_CASR_CLUSTER: LazyLock<&'static str> =
21+
LazyLock::new(|| env!("CARGO_BIN_EXE_casr-cluster"));
22+
static EXE_CASR_SAN: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-san"));
23+
static EXE_CASR_UBSAN: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-ubsan"));
24+
static EXE_CASR_PYTHON: LazyLock<&'static str> =
25+
LazyLock::new(|| env!("CARGO_BIN_EXE_casr-python"));
26+
static EXE_CASR_LUA: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-lua"));
27+
static EXE_CASR_JAVA: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-java"));
28+
static EXE_CASR_JS: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-js"));
29+
static EXE_CASR_CSHARP: LazyLock<&'static str> =
30+
LazyLock::new(|| env!("CARGO_BIN_EXE_casr-csharp"));
31+
static EXE_CASR_GDB: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_BIN_EXE_casr-gdb"));
32+
static PROJECT_DIR: LazyLock<&'static str> = LazyLock::new(|| env!("CARGO_MANIFEST_DIR"));
2833

2934
fn abs_path(rpath: &str) -> String {
3035
// Define paths.
@@ -2675,7 +2680,7 @@ fn test_casr_cluster_d_and_m() {
26752680
};
26762681
let casrep = dirvec.next().unwrap().unwrap().path();
26772682
let _ = std::fs::remove_file(casrep);
2678-
let output = Command::new(*EXE_CASR_CLUSTER.read().unwrap())
2683+
let output = Command::new(*EXE_CASR_CLUSTER)
26792684
.args(["--diff", &paths[0], &paths[1], &paths[2]])
26802685
.output()
26812686
.expect("failed to start casr-cluster");
@@ -2699,7 +2704,7 @@ fn test_casr_cluster_u() {
26992704

27002705
let _ = fs::remove_dir_all(&paths[1]);
27012706

2702-
let output = Command::new(*EXE_CASR_CLUSTER.read().unwrap())
2707+
let output = Command::new(*EXE_CASR_CLUSTER)
27032708
.args(["-c", &paths[0], &paths[1]])
27042709
.env("CASR_CLUSTER_UNIQUE_CRASHLINE", "1")
27052710
.output()
@@ -2733,7 +2738,7 @@ fn test_casr_cluster_u() {
27332738
let _ = std::fs::remove_dir_all(&paths[3]);
27342739
let _ = std::fs::rename(&paths[4], &paths[3]);
27352740

2736-
let output = Command::new(*EXE_CASR_CLUSTER.read().unwrap())
2741+
let output = Command::new(*EXE_CASR_CLUSTER)
27372742
.args(["-u", &paths[0], &paths[1]])
27382743
.env("CASR_CLUSTER_UNIQUE_CRASHLINE", "1")
27392744
.output()
@@ -2814,7 +2819,7 @@ fn test_casr_cluster_u() {
28142819
assert_eq!(sil, 0.15436556855344655, "Silhouette score mismatch.");
28152820

28162821
// Test estimation
2817-
let output = Command::new(*EXE_CASR_CLUSTER.read().unwrap())
2822+
let output = Command::new(*EXE_CASR_CLUSTER)
28182823
.args(["-e", &paths[1]])
28192824
.output()
28202825
.expect("failed to start casr-cluster");
@@ -3983,9 +3988,7 @@ fn test_casr_libfuzzer() {
39833988

39843989
let _ = fs::create_dir(abs_path("tests/tmp_tests_casr"));
39853990

3986-
let bins = Path::new(*EXE_CASR_LIBFUZZER)
3987-
.parent()
3988-
.unwrap();
3991+
let bins = Path::new(*EXE_CASR_LIBFUZZER).parent().unwrap();
39893992
let mut cmd = Command::new(*EXE_CASR_LIBFUZZER);
39903993
cmd.args(["-i", &paths[0], "-o", &paths[1], "-f", "--", &paths[3]])
39913994
.env(
@@ -4215,10 +4218,8 @@ fn test_casr_libfuzzer_atheris() {
42154218
.status()
42164219
.expect("failed to unzip ruamel.zip");
42174220

4218-
let bins = Path::new(*EXE_CASR_LIBFUZZER.read().unwrap())
4219-
.parent()
4220-
.unwrap();
4221-
let mut cmd = Command::new(*EXE_CASR_LIBFUZZER.read().unwrap());
4221+
let bins = Path::new(*EXE_CASR_LIBFUZZER).parent().unwrap();
4222+
let mut cmd = Command::new(*EXE_CASR_LIBFUZZER);
42224223
cmd.args(["-i", &paths[0], "-o", &paths[1], "--", &paths[2]])
42234224
.env(
42244225
"PATH",
@@ -4797,9 +4798,7 @@ fn test_casr_python_call_san_df() {
47974798

47984799
assert!(Path::new(&lib_path.to_string()).exists());
47994800

4800-
let bins = Path::new(*EXE_CASR_PYTHON)
4801-
.parent()
4802-
.unwrap();
4801+
let bins = Path::new(*EXE_CASR_PYTHON).parent().unwrap();
48034802
let output = Command::new(*EXE_CASR_PYTHON)
48044803
.env("ASAN_OPTIONS", "detect_leaks=0,symolize=1")
48054804
.env("LD_PRELOAD", lib_path.to_string())
@@ -4968,7 +4967,7 @@ fn test_casr_js() {
49684967
panic!("No node is found.");
49694968
};
49704969

4971-
let output = Command::new(*EXE_CASR_JS.read().unwrap())
4970+
let output = Command::new(*EXE_CASR_JS)
49724971
.args(["--stdout", "--", (node_path.to_str().unwrap()), &test_path])
49734972
.output()
49744973
.expect("failed to start casr-js");
@@ -5572,9 +5571,7 @@ fn test_casr_libfuzzer_jsfuzz() {
55725571
.status()
55735572
.expect("failed to unzip crashes.zip");
55745573

5575-
let bins = Path::new(*EXE_CASR_LIBFUZZER)
5576-
.parent()
5577-
.unwrap();
5574+
let bins = Path::new(*EXE_CASR_LIBFUZZER).parent().unwrap();
55785575
let mut cmd = Command::new(*EXE_CASR_LIBFUZZER);
55795576
cmd.args([
55805577
"-i",
@@ -5659,9 +5656,7 @@ fn test_casr_libfuzzer_jazzer_js() {
56595656
.status()
56605657
.expect("failed to unzip crashes.zip");
56615658

5662-
let bins = Path::new(*EXE_CASR_LIBFUZZER)
5663-
.parent()
5664-
.unwrap();
5659+
let bins = Path::new(*EXE_CASR_LIBFUZZER).parent().unwrap();
56655660
let mut cmd = Command::new(*EXE_CASR_LIBFUZZER);
56665661
cmd.args([
56675662
"-i",
@@ -5818,9 +5813,7 @@ fn test_casr_libfuzzer_jazzer_js_xml2js() {
58185813
panic!("No npx is found.");
58195814
};
58205815

5821-
let bins = Path::new(*EXE_CASR_LIBFUZZER)
5822-
.parent()
5823-
.unwrap();
5816+
let bins = Path::new(*EXE_CASR_LIBFUZZER).parent().unwrap();
58245817
let mut cmd = Command::new(*EXE_CASR_LIBFUZZER);
58255818
cmd.args([
58265819
"-i",
@@ -5918,7 +5911,7 @@ fn test_casr_csharp() {
59185911
panic!("No dotnet is found.");
59195912
};
59205913

5921-
let output = Command::new(*EXE_CASR_CSHARP.read().unwrap())
5914+
let output = Command::new(*EXE_CASR_CSHARP)
59225915
.args([
59235916
"--stdout",
59245917
"--",
@@ -5988,7 +5981,7 @@ fn test_casr_csharp_native() {
59885981
.output()
59895982
.expect("failed to build test");
59905983

5991-
let output = Command::new(*EXE_CASR_CSHARP.read().unwrap())
5984+
let output = Command::new(*EXE_CASR_CSHARP)
59925985
.args([
59935986
"--stdout",
59945987
"--",
@@ -6065,8 +6058,8 @@ fn test_casr_afl_csharp() {
60656058
.output()
60666059
.expect("dotnet publish crashed");
60676060

6068-
let bins = Path::new(*EXE_CASR_AFL.read().unwrap()).parent().unwrap();
6069-
let mut output = Command::new(*EXE_CASR_AFL.read().unwrap());
6061+
let bins = Path::new(*EXE_CASR_AFL).parent().unwrap();
6062+
let mut output = Command::new(*EXE_CASR_AFL);
60706063
output.args(["-i", &paths[0], "-o", &paths[1]]).env(
60716064
"PATH",
60726065
format!("{}:{}", bins.display(), std::env::var("PATH").unwrap()),
@@ -6164,8 +6157,8 @@ fn test_casr_afl_csharp_ignore_cmd() {
61646157
.output()
61656158
.expect("dotnet build crashed");
61666159

6167-
let bins = Path::new(*EXE_CASR_AFL.read().unwrap()).parent().unwrap();
6168-
let mut output = Command::new(*EXE_CASR_AFL.read().unwrap());
6160+
let bins = Path::new(*EXE_CASR_AFL).parent().unwrap();
6161+
let mut output = Command::new(*EXE_CASR_AFL);
61696162
output
61706163
.args([
61716164
"--ignore-cmdline",
@@ -6277,8 +6270,8 @@ fn test_casr_afl_csharp_vanilla_afl() {
62776270
.output()
62786271
.expect("dotnet build crashed");
62796272

6280-
let bins = Path::new(*EXE_CASR_AFL.read().unwrap()).parent().unwrap();
6281-
let mut output = Command::new(*EXE_CASR_AFL.read().unwrap());
6273+
let bins = Path::new(*EXE_CASR_AFL).parent().unwrap();
6274+
let mut output = Command::new(*EXE_CASR_AFL);
62826275
output
62836276
.args([
62846277
"-i",
@@ -6375,10 +6368,8 @@ fn test_casr_libfuzzer_libafl() {
63756368
"/tmp/test_libafl_fuzzer",
63766369
);
63776370

6378-
let bins = Path::new(*EXE_CASR_LIBFUZZER.read().unwrap())
6379-
.parent()
6380-
.unwrap();
6381-
let output = Command::new(*EXE_CASR_LIBFUZZER.read().unwrap())
6371+
let bins = Path::new(*EXE_CASR_LIBFUZZER).parent().unwrap();
6372+
let output = Command::new(*EXE_CASR_LIBFUZZER)
63826373
.args([
63836374
"-i",
63846375
&paths[0],

libcasr/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ exclude = ["/fuzz"]
1313

1414
[dependencies]
1515
regex = "1"
16-
lazy_static = "1.5"
1716
goblin = { version = "0.9", optional = true }
1817
capstone = { version = "0.13", optional = true }
1918
chrono = "0.4"

libcasr/src/stacktrace.rs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
//! Provides API's for parsing, filtering, deduplication and clustering.
22
extern crate kodama;
3-
extern crate lazy_static;
43

54
use crate::constants::{
65
STACK_FRAME_FILEPATH_IGNORE_REGEXES_CPP, STACK_FRAME_FILEPATH_IGNORE_REGEXES_CSHARP,
@@ -18,7 +17,7 @@ use kodama::{Method, linkage};
1817
use regex::Regex;
1918
use std::collections::{HashMap, HashSet};
2019
use std::fmt::{self, Write};
21-
use std::sync::RwLock;
20+
use std::sync::{LazyLock, RwLock};
2221

2322
// Re-export types from gdb_command for convenient use from Casr library
2423
/// Represents the information about stack trace.
@@ -28,14 +27,12 @@ pub type DebugInfo = gdb_command::stacktrace::DebugInfo;
2827
/// Represents the information about one line of the stack trace.
2928
pub type StacktraceEntry = gdb_command::stacktrace::StacktraceEntry;
3029

31-
lazy_static::lazy_static! {
32-
/// Regular expressions for functions to be ignored.
33-
pub static ref STACK_FRAME_FUNCTION_IGNORE_REGEXES: RwLock<Vec<String>> = RwLock::new(
34-
Vec::new());
35-
/// Regular expressions for file paths to be ignored.
36-
pub static ref STACK_FRAME_FILEPATH_IGNORE_REGEXES: RwLock<Vec<String>> = RwLock::new(
37-
Vec::new());
38-
}
30+
/// Regular expressions for functions to be ignored.
31+
pub static STACK_FRAME_FUNCTION_IGNORE_REGEXES: LazyLock<RwLock<Vec<String>>> =
32+
LazyLock::new(|| RwLock::new(Vec::new()));
33+
/// Regular expressions for file paths to be ignored.
34+
pub static STACK_FRAME_FILEPATH_IGNORE_REGEXES: LazyLock<RwLock<Vec<String>>> =
35+
LazyLock::new(|| RwLock::new(Vec::new()));
3936

4037
/// Threshold for clusters diameter
4138
pub const THRESHOLD: f64 = 0.3;
@@ -471,9 +468,7 @@ pub mod tests {
471468

472469
use crate::stacktrace::*;
473470

474-
lazy_static::lazy_static! {
475-
static ref INITED_STACKFRAMES_FILTER: RwLock<bool> = RwLock::new(false);
476-
}
471+
static INITED_STACKFRAMES_FILTER: LazyLock<RwLock<bool>> = LazyLock::new(|| RwLock::new(false));
477472

478473
/// Thread-safe initialization of all stackframe filters
479474
pub fn safe_init_ignore_stack_frames() {

0 commit comments

Comments
 (0)