aboutsummaryrefslogtreecommitdiff
path: root/src/afl-showmap.c
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2020-11-06 09:37:14 +0100
committerGitHub <noreply@github.com>2020-11-06 09:37:14 +0100
commit3b799c09cd68bb68b26784261f1fbaa3e737c747 (patch)
treee581c3689d5fe231678464bb6bd48cab75c7db41 /src/afl-showmap.c
parent5ee63a6e6267e448342ccb28cc8d3c0d34ffc1cd (diff)
parent50c98445fe74b92d2e6ab784def3e8b26a662b36 (diff)
downloadafl++-3b799c09cd68bb68b26784261f1fbaa3e737c747.tar.gz
Merge pull request #594 from AFLplusplus/dev
push to stable
Diffstat (limited to 'src/afl-showmap.c')
-rw-r--r--src/afl-showmap.c60
1 files changed, 55 insertions, 5 deletions
diff --git a/src/afl-showmap.c b/src/afl-showmap.c
index f4a7c336..4b357254 100644
--- a/src/afl-showmap.c
+++ b/src/afl-showmap.c
@@ -209,6 +209,13 @@ static u32 write_results_to_file(afl_forkserver_t *fsrv, u8 *outfile) {
if (!outfile) { FATAL("Output filename not set (Bug in AFL++?)"); }
+ if (cmin_mode &&
+ (fsrv->last_run_timed_out || (!caa && child_crashed != cco))) {
+
+ return ret;
+
+ }
+
if (!strncmp(outfile, "/dev/", 5)) {
fd = open(outfile, O_WRONLY);
@@ -255,9 +262,6 @@ static u32 write_results_to_file(afl_forkserver_t *fsrv, u8 *outfile) {
if (cmin_mode) {
- if (fsrv->last_run_timed_out) { break; }
- if (!caa && child_crashed != cco) { break; }
-
fprintf(f, "%u%u\n", fsrv->trace_bits[i], i);
} else {
@@ -292,6 +296,38 @@ static void showmap_run_target_forkserver(afl_forkserver_t *fsrv, u8 *mem,
classify_counts(fsrv);
+ if (!quiet_mode) { SAYF(cRST "-- Program output ends --\n"); }
+
+ if (!fsrv->last_run_timed_out && !stop_soon &&
+ WIFSIGNALED(fsrv->child_status)) {
+
+ child_crashed = 1;
+
+ } else {
+
+ child_crashed = 0;
+
+ }
+
+ if (!quiet_mode) {
+
+ if (fsrv->last_run_timed_out) {
+
+ SAYF(cLRD "\n+++ Program timed off +++\n" cRST);
+
+ } else if (stop_soon) {
+
+ SAYF(cLRD "\n+++ Program aborted by user +++\n" cRST);
+
+ } else if (child_crashed) {
+
+ SAYF(cLRD "\n+++ Program killed by signal %u +++\n" cRST,
+ WTERMSIG(fsrv->child_status));
+
+ }
+
+ }
+
if (stop_soon) {
SAYF(cRST cLRD "\n+++ afl-showmap folder mode aborted by user +++\n" cRST);
@@ -742,8 +778,10 @@ int main(int argc, char **argv_orig, char **envp) {
case 'f': // only in here to avoid a compiler warning for use_stdin
- fsrv->use_stdin = 0;
FATAL("Option -f is not supported in afl-showmap");
+ // currently not reached:
+ fsrv->use_stdin = 0;
+ fsrv->out_file = strdup(optarg);
break;
@@ -1015,6 +1053,7 @@ int main(int argc, char **argv_orig, char **envp) {
alloc_printf("%s/.afl-showmap-temp-%u", use_dir, (u32)getpid());
unlink(stdin_file);
atexit(at_exit_handler);
+ fsrv->out_file = stdin_file;
fsrv->out_fd = open(stdin_file, O_RDWR | O_CREAT | O_EXCL, 0600);
if (fsrv->out_fd < 0) { PFATAL("Unable to create '%s'", out_file); }
@@ -1153,13 +1192,24 @@ int main(int argc, char **argv_orig, char **envp) {
afl_shm_deinit(&shm);
if (fsrv->use_shmem_fuzz) shm_fuzz = deinit_shmem(fsrv, shm_fuzz);
- u32 ret = child_crashed * 2 + fsrv->last_run_timed_out;
+ u32 ret;
+
+ if (cmin_mode && !!getenv("AFL_CMIN_CRASHES_ONLY")) {
+
+ ret = fsrv->last_run_timed_out;
+
+ } else {
+
+ ret = child_crashed * 2 + fsrv->last_run_timed_out;
+
+ }
if (fsrv->target_path) { ck_free(fsrv->target_path); }
afl_fsrv_deinit(fsrv);
if (stdin_file) { ck_free(stdin_file); }
+ if (collect_coverage) { free(coverage_map); }
argv_cpy_free(argv);
if (fsrv->qemu_mode) { free(use_argv[2]); }