Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions casr/src/bin/casr-cluster.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
use casr::util;
use libcasr::constants::*;
use libcasr::init_ignored_frames;
use libcasr::stacktrace::*;
use libcasr::{init_ignored_frames, stacktrace::*};

use anyhow::{bail, Context, Result};
use clap::{Arg, ArgAction};
Expand Down
5 changes: 1 addition & 4 deletions casr/src/bin/casr-dojo.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
use casr::util;
use libcasr::constants::*;
use libcasr::init_ignored_frames;
use libcasr::report::CrashReport;
use libcasr::stacktrace::*;
use libcasr::{init_ignored_frames, report::CrashReport, stacktrace::*};

use anyhow::{bail, Result};
use clap::error::{ContextKind, ContextValue, ErrorKind};
Expand Down
21 changes: 11 additions & 10 deletions casr/src/bin/casr-gdb.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
use casr::util;
use libcasr::constants::*;
use libcasr::cpp::CppException;
use libcasr::exception::Exception;
use libcasr::gdb::exploitable::{GdbContext, MachineInfo};
use libcasr::gdb::GdbStacktrace;
use libcasr::init_ignored_frames;
use libcasr::report::CrashReport;
use libcasr::rust::RustPanic;
use libcasr::severity::Severity;
use libcasr::stacktrace::*;
use libcasr::{
cpp::CppException,
exception::Exception,
gdb::exploitable::{GdbContext, MachineInfo},
gdb::GdbStacktrace,
init_ignored_frames,
report::CrashReport,
rust::RustPanic,
severity::Severity,
stacktrace::*,
};

use anyhow::{bail, Context, Result};
use clap::{Arg, ArgAction, ArgGroup};
Expand Down
9 changes: 3 additions & 6 deletions casr/src/bin/casr-java.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
use casr::util;
use libcasr::constants::*;
use libcasr::exception::Exception;
use libcasr::init_ignored_frames;
use libcasr::java::*;
use libcasr::report::CrashReport;
use libcasr::stacktrace::*;
use libcasr::{
exception::Exception, init_ignored_frames, java::*, report::CrashReport, stacktrace::*,
};

use anyhow::{bail, Result};
use clap::{Arg, ArgAction, ArgGroup};
Expand Down
13 changes: 7 additions & 6 deletions casr/src/bin/casr-python.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
use casr::util;
use libcasr::constants::*;
use libcasr::exception::Exception;
use libcasr::init_ignored_frames;
use libcasr::python::{PythonException, PythonStacktrace};
use libcasr::report::CrashReport;
use libcasr::stacktrace::*;
use libcasr::{
exception::Exception,
init_ignored_frames,
python::{PythonException, PythonStacktrace},
report::CrashReport,
stacktrace::*,
};

use anyhow::{bail, Result};
use clap::{Arg, ArgAction, ArgGroup};
Expand Down
29 changes: 17 additions & 12 deletions casr/src/bin/casr-san.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
use casr::util;
use libcasr::asan::{AsanContext, AsanStacktrace};
use libcasr::constants::*;
use libcasr::cpp::CppException;
use libcasr::exception::Exception;
use libcasr::execution_class::*;
use libcasr::gdb::*;
use libcasr::go::*;
use libcasr::init_ignored_frames;
use libcasr::report::CrashReport;
use libcasr::rust::{RustPanic, RustStacktrace};
use libcasr::severity::Severity;
use libcasr::stacktrace::*;
use libcasr::{
asan::{AsanContext, AsanStacktrace},
constants::{
SIGINFO_SIGABRT, SIGINFO_SIGBUS, SIGINFO_SIGILL, SIGINFO_SIGSEGV, SIGINFO_SIGSYS,
SIGINFO_SIGTRAP,
},
cpp::CppException,
exception::Exception,
execution_class::*,
gdb::*,
go::*,
init_ignored_frames,
report::CrashReport,
rust::{RustPanic, RustStacktrace},
severity::Severity,
stacktrace::*,
};

use anyhow::{bail, Context, Result};
use clap::{Arg, ArgAction, ArgGroup};
Expand Down
12 changes: 1 addition & 11 deletions libcasr/fuzz/fuzz_targets/parse_stacktrace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,12 @@ use libfuzzer_sys::fuzz_target;

use libcasr::{
asan::AsanStacktrace,
constants::{
STACK_FRAME_FILEPATH_IGNORE_REGEXES_CPP, STACK_FRAME_FILEPATH_IGNORE_REGEXES_GO,
STACK_FRAME_FILEPATH_IGNORE_REGEXES_JAVA, STACK_FRAME_FILEPATH_IGNORE_REGEXES_PYTHON,
STACK_FRAME_FILEPATH_IGNORE_REGEXES_RUST, STACK_FRAME_FUNCTION_IGNORE_REGEXES_CPP,
STACK_FRAME_FUNCTION_IGNORE_REGEXES_GO, STACK_FRAME_FUNCTION_IGNORE_REGEXES_JAVA,
STACK_FRAME_FUNCTION_IGNORE_REGEXES_PYTHON, STACK_FRAME_FUNCTION_IGNORE_REGEXES_RUST,
},
gdb::GdbStacktrace,
go::GoStacktrace,
init_ignored_frames,
java::JavaStacktrace,
python::PythonStacktrace,
stacktrace::{
CrashLineExt, ParseStacktrace, STACK_FRAME_FILEPATH_IGNORE_REGEXES,
STACK_FRAME_FUNCTION_IGNORE_REGEXES,
},
stacktrace::{CrashLineExt, Filter, ParseStacktrace, Stacktrace},
};

fuzz_target!(|data: &[u8]| {
Expand Down
11 changes: 1 addition & 10 deletions libcasr/src/rust.rs
Original file line number Diff line number Diff line change
Expand Up @@ -108,17 +108,8 @@ mod tests {

use super::*;
use crate::{
constants::{
STACK_FRAME_FILEPATH_IGNORE_REGEXES_CPP, STACK_FRAME_FILEPATH_IGNORE_REGEXES_GO,
STACK_FRAME_FILEPATH_IGNORE_REGEXES_JAVA, STACK_FRAME_FILEPATH_IGNORE_REGEXES_PYTHON,
STACK_FRAME_FILEPATH_IGNORE_REGEXES_RUST, STACK_FRAME_FUNCTION_IGNORE_REGEXES_CPP,
STACK_FRAME_FUNCTION_IGNORE_REGEXES_GO, STACK_FRAME_FUNCTION_IGNORE_REGEXES_JAVA,
STACK_FRAME_FUNCTION_IGNORE_REGEXES_PYTHON, STACK_FRAME_FUNCTION_IGNORE_REGEXES_RUST,
},
init_ignored_frames,
stacktrace::{
Filter, STACK_FRAME_FILEPATH_IGNORE_REGEXES, STACK_FRAME_FUNCTION_IGNORE_REGEXES,
},
stacktrace::{Filter, Stacktrace},
};

#[test]
Expand Down
13 changes: 7 additions & 6 deletions libcasr/src/sarif.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
//! Sarif module contains `Sarif` struct that contains multiple `CrashReport`
//! structs in SARIF format.

use crate::constants::*;
use crate::error::{Error, Result};
use crate::execution_class::{ExecutionClass, CLASSES};
use crate::init_ignored_frames;
use crate::report::CrashReport;
use crate::stacktrace::{STACK_FRAME_FILEPATH_IGNORE_REGEXES, STACK_FRAME_FUNCTION_IGNORE_REGEXES};
use crate::{
error::{Error, Result},
execution_class::{ExecutionClass, CLASSES},
init_ignored_frames,
report::CrashReport,
stacktrace::{Filter, Stacktrace},
};

use serde_json::{Map, Value};

Expand Down
64 changes: 52 additions & 12 deletions libcasr/src/stacktrace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@
extern crate kodama;
extern crate lazy_static;

use crate::constants::{
STACK_FRAME_FILEPATH_IGNORE_REGEXES_CPP, STACK_FRAME_FILEPATH_IGNORE_REGEXES_GO,
STACK_FRAME_FILEPATH_IGNORE_REGEXES_JAVA, STACK_FRAME_FILEPATH_IGNORE_REGEXES_PYTHON,
STACK_FRAME_FILEPATH_IGNORE_REGEXES_RUST, STACK_FRAME_FUNCTION_IGNORE_REGEXES_CPP,
STACK_FRAME_FUNCTION_IGNORE_REGEXES_GO, STACK_FRAME_FUNCTION_IGNORE_REGEXES_JAVA,
STACK_FRAME_FUNCTION_IGNORE_REGEXES_PYTHON, STACK_FRAME_FUNCTION_IGNORE_REGEXES_RUST,
};
use crate::error::*;
use kodama::{linkage, Method};
use regex::Regex;
Expand Down Expand Up @@ -31,18 +38,7 @@ lazy_static::lazy_static! {
macro_rules! init_ignored_frames {
( $( $x:expr ),* ) => {
{
let (funcs, files): (Vec<_>, Vec<_>) = [$($x,)*].iter().map(|&x|
match x {
"python" => (STACK_FRAME_FUNCTION_IGNORE_REGEXES_PYTHON, STACK_FRAME_FILEPATH_IGNORE_REGEXES_PYTHON),
"rust" => (STACK_FRAME_FUNCTION_IGNORE_REGEXES_RUST, STACK_FRAME_FILEPATH_IGNORE_REGEXES_RUST),
"cpp" => (STACK_FRAME_FUNCTION_IGNORE_REGEXES_CPP, STACK_FRAME_FILEPATH_IGNORE_REGEXES_CPP),
"go" => (STACK_FRAME_FUNCTION_IGNORE_REGEXES_GO, STACK_FRAME_FILEPATH_IGNORE_REGEXES_GO),
"java" => (STACK_FRAME_FUNCTION_IGNORE_REGEXES_JAVA, STACK_FRAME_FILEPATH_IGNORE_REGEXES_JAVA),
&_ => (["^[^.]$"].as_slice(), ["^[^.]$"].as_slice()),
}
).unzip();
*STACK_FRAME_FUNCTION_IGNORE_REGEXES.write().unwrap() = funcs.concat().iter().map(|x| x.to_string()).collect::<Vec<String>>();
*STACK_FRAME_FILEPATH_IGNORE_REGEXES.write().unwrap() = files.concat().iter().map(|x| x.to_string()).collect::<Vec<String>>();
<Stacktrace as Filter>::init_frame_filter(&[$($x,)*]);
}
};
}
Expand Down Expand Up @@ -257,6 +253,50 @@ pub fn cluster_stacktraces(stacktraces: &[Stacktrace]) -> Result<Vec<u32>> {
pub trait Filter {
/// Filter frames from the stack trace that are not related to analyzed code containing crash.
fn filter(&mut self);

/// Initialize global variables for stacktrace filtering
///
/// # Arguments
///
/// * `languages` - list of program languages for filtering
fn init_frame_filter(languages: &[&str]) {
let (funcs, files): (Vec<_>, Vec<_>) = languages
.iter()
.map(|&x| match x {
"python" => (
STACK_FRAME_FUNCTION_IGNORE_REGEXES_PYTHON,
STACK_FRAME_FILEPATH_IGNORE_REGEXES_PYTHON,
),
"rust" => (
STACK_FRAME_FUNCTION_IGNORE_REGEXES_RUST,
STACK_FRAME_FILEPATH_IGNORE_REGEXES_RUST,
),
"cpp" => (
STACK_FRAME_FUNCTION_IGNORE_REGEXES_CPP,
STACK_FRAME_FILEPATH_IGNORE_REGEXES_CPP,
),
"go" => (
STACK_FRAME_FUNCTION_IGNORE_REGEXES_GO,
STACK_FRAME_FILEPATH_IGNORE_REGEXES_GO,
),
"java" => (
STACK_FRAME_FUNCTION_IGNORE_REGEXES_JAVA,
STACK_FRAME_FILEPATH_IGNORE_REGEXES_JAVA,
),
&_ => (["^[^.]$"].as_slice(), ["^[^.]$"].as_slice()),
})
.unzip();
*STACK_FRAME_FUNCTION_IGNORE_REGEXES.write().unwrap() = funcs
.concat()
.iter()
.map(|x| x.to_string())
.collect::<Vec<String>>();
*STACK_FRAME_FILEPATH_IGNORE_REGEXES.write().unwrap() = files
.concat()
.iter()
.map(|x| x.to_string())
.collect::<Vec<String>>();
}
}

impl Filter for Stacktrace {
Expand Down