Skip to content

Commit c6e0e4c

Browse files
committed
Minor API changes
1 parent 92a2586 commit c6e0e4c

File tree

13 files changed

+73
-39
lines changed

13 files changed

+73
-39
lines changed

casr/src/bin/casr.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,14 @@ fn main() -> Result<()> {
171171
// Extract report
172172
common::fill_report(&mut report, extractor.report(), &mode);
173173
report.stacktrace = extractor.extract_stacktrace()?;
174-
if let Some(execution_class) = extractor.execution_class() {
175-
report.execution_class = execution_class;
176-
} else {
177-
eprintln!("Couldn't estimate severity.");
174+
let execution_class = extractor.execution_class();
175+
match execution_class {
176+
Ok(execution_class) => {
177+
report.execution_class = execution_class;
178+
}
179+
Err(err) => {
180+
eprintln!("Couldn't estimate severity. {}", err);
181+
}
178182
}
179183
if let Ok(crashline) = extractor.crash_line() {
180184
report.crashline = crashline.to_string();
@@ -196,7 +200,5 @@ fn main() -> Result<()> {
196200
common::check_exception(&mut report, extractor.stream(), &mode);
197201

198202
// Output report
199-
// TODO: rewrite func for &[String]
200-
let argv: Vec<&str> = argv.iter().map(|s| s.as_str()).collect();
201203
util::output_report(&report, &matches, &argv)
202204
}

casr/src/util.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ pub fn call_casr_san(matches: &ArgMatches, argv: &[&str], name: &str) -> Result<
7676
/// * `matches` - casr options
7777
///
7878
/// * `argv` - executable file options
79-
pub fn output_report(report: &CrashReport, matches: &ArgMatches, argv: &[&str]) -> Result<()> {
79+
pub fn output_report(report: &CrashReport, matches: &ArgMatches, argv: &[String]) -> Result<()> {
8080
// Convert report to string.
8181
let repstr = serde_json::to_string_pretty(&report).unwrap();
8282

libcasr/src/asan.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,8 @@ impl ReportExtractor for SanCrash {
265265
fn report(&self) -> Vec<String> {
266266
self.context.report()
267267
}
268-
fn execution_class(&self) -> Option<ExecutionClass> {
269-
AsanContext(self.context.report()).severity().ok()
268+
fn execution_class(&self) -> Result<ExecutionClass> {
269+
AsanContext(self.context.report()).severity()
270270
}
271271
}
272272

@@ -336,7 +336,7 @@ impl ReportExtractor for AsanCrash {
336336
fn report(&self) -> Vec<String> {
337337
self.san.report()
338338
}
339-
fn execution_class(&self) -> Option<ExecutionClass> {
339+
fn execution_class(&self) -> Result<ExecutionClass> {
340340
self.san.execution_class()
341341
}
342342
}

libcasr/src/csharp.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,13 @@ impl ReportExtractor for CSharpException {
182182
fn report(&self) -> Vec<String> {
183183
self.context.report()
184184
}
185-
fn execution_class(&self) -> Option<ExecutionClass> {
186-
CSharpException::parse_exception(self.context.stream())
185+
fn execution_class(&self) -> Result<ExecutionClass> {
186+
let Some(class) = CSharpException::parse_exception(self.context.stream()) else {
187+
return Err(Error::Casr(
188+
"C# exception is not found!".to_string(),
189+
));
190+
};
191+
Ok(class)
187192
}
188193
}
189194

@@ -458,8 +463,8 @@ Unhandled exception. System.ArgumentException: 1111 ---> System.IO.IOException:
458463
);
459464

460465
let execution_class = exception.execution_class();
461-
let Some(execution_class) = execution_class else {
462-
panic!("Execution class is corrupted");
466+
let Ok(execution_class) = execution_class else {
467+
panic!("Execution class is corrupted: {}", execution_class.err().unwrap());
463468
};
464469
assert_eq!(execution_class.severity, "NOT_EXPLOITABLE");
465470
assert_eq!(

libcasr/src/gdb/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//! Gdb module implements `ParseStacktrace`, `Exception` and `Severity` traits for Gdb output.
2-
use crate::{
2+
use super::{
33
error::{Error, Result},
44
execution_class::ExecutionClass,
55
gdb::exploitable::{GdbContext, MachineInfo},
@@ -138,7 +138,7 @@ impl ReportExtractor for GdbCrash {
138138
fn report(&self) -> Vec<String> {
139139
self.report.clone()
140140
}
141-
fn execution_class(&self) -> Option<ExecutionClass> {
142-
self.context.severity().ok()
141+
fn execution_class(&self) -> Result<ExecutionClass> {
142+
self.context.severity()
143143
}
144144
}

libcasr/src/go.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,11 @@ impl ReportExtractor for GoPanic {
141141
fn report(&self) -> Vec<String> {
142142
self.context.report()
143143
}
144-
fn execution_class(&self) -> Option<ExecutionClass> {
145-
GoPanic::parse_exception(self.stream())
144+
fn execution_class(&self) -> Result<ExecutionClass> {
145+
let Some(class) = GoPanic::parse_exception(self.stream()) else {
146+
return Err(Error::Casr("Go panic is not found!".to_string()));
147+
};
148+
Ok(class)
146149
}
147150
}
148151

libcasr/src/java.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,11 @@ impl ReportExtractor for JavaException {
176176
fn report(&self) -> Vec<String> {
177177
self.context.report()
178178
}
179-
fn execution_class(&self) -> Option<ExecutionClass> {
180-
JavaException::parse_exception(self.context.stream())
179+
fn execution_class(&self) -> Result<ExecutionClass> {
180+
let Some(class) = JavaException::parse_exception(self.context.stream()) else {
181+
return Err(Error::Casr("Java exception is not found!".to_string()));
182+
};
183+
Ok(class)
181184
}
182185
}
183186

@@ -351,8 +354,11 @@ mod tests {
351354
assert_eq!(crashline.to_string(), "Test1.java:33",);
352355

353356
let execution_class = exception.execution_class();
354-
let Some(execution_class) = execution_class else {
355-
panic!("Execution class is corrupted");
357+
let Ok(execution_class) = execution_class else {
358+
panic!(
359+
"Execution class is corrupted: {}",
360+
execution_class.err().unwrap()
361+
);
356362
};
357363
assert_eq!(execution_class.severity, "NOT_EXPLOITABLE");
358364
assert_eq!(execution_class.short_description, "LowLevelException");

libcasr/src/js.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,11 @@ impl ReportExtractor for JsException {
267267
fn report(&self) -> Vec<String> {
268268
self.context.report()
269269
}
270-
fn execution_class(&self) -> Option<ExecutionClass> {
271-
JsException::parse_exception(self.context.stream())
270+
fn execution_class(&self) -> Result<ExecutionClass> {
271+
let Some(class) = JsException::parse_exception(self.context.stream()) else {
272+
return Err(Error::Casr("JS exception is not found!".to_string()));
273+
};
274+
Ok(class)
272275
}
273276
}
274277

@@ -344,8 +347,11 @@ Uncaught ReferenceError: var is not defined
344347
};
345348

346349
let execution_class = exception.execution_class();
347-
let Some(execution_class) = execution_class else {
348-
panic!("Execution class is corrupted");
350+
let Ok(execution_class) = execution_class else {
351+
panic!(
352+
"Execution class is corrupted: {}",
353+
execution_class.err().unwrap()
354+
);
349355
};
350356
assert_eq!(execution_class.short_description, "ReferenceError");
351357
assert_eq!(execution_class.description, "var is not defined");

libcasr/src/lua.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,8 @@ impl ReportExtractor for LuaException {
195195
fn report(&self) -> Vec<String> {
196196
self.lua_report()
197197
}
198-
fn execution_class(&self) -> Option<ExecutionClass> {
199-
self.severity().ok()
198+
fn execution_class(&self) -> Result<ExecutionClass> {
199+
self.severity()
200200
}
201201
}
202202

@@ -349,8 +349,11 @@ mod tests {
349349
assert_eq!(crashline.to_string(), "(command line):1");
350350

351351
let execution_class = exception.execution_class();
352-
let Some(execution_class) = execution_class else {
353-
panic!("Execution class is corrupted");
352+
let Ok(execution_class) = execution_class else {
353+
panic!(
354+
"Execution class is corrupted: {}",
355+
execution_class.err().unwrap()
356+
);
354357
};
355358
assert_eq!(execution_class.severity, "NOT_EXPLOITABLE");
356359
assert_eq!(execution_class.short_description, "crash");

libcasr/src/msan.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ impl ReportExtractor for MsanCrash {
6464
fn report(&self) -> Vec<String> {
6565
self.san.report()
6666
}
67-
fn execution_class(&self) -> Option<ExecutionClass> {
67+
fn execution_class(&self) -> Result<ExecutionClass> {
6868
self.san.execution_class()
6969
}
7070
}

0 commit comments

Comments
 (0)