about summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-xafl-cmin6
-rwxr-xr-xafl-cmin.bash1
-rw-r--r--docs/Changelog.md3
-rw-r--r--src/afl-fuzz-init.c25
4 files changed, 30 insertions, 5 deletions
diff --git a/afl-cmin b/afl-cmin
index a1d5401f..a88460a8 100755
--- a/afl-cmin
+++ b/afl-cmin
@@ -13,7 +13,7 @@ awk -f - -- ${@+"$@"} <<'EOF'
 # awk script to minimize a test corpus of input files
 #
 # based on afl-cmin bash script written by Michal Zalewski
-# rewritten by Heiko Eißfeldt (hexcoder-)
+# rewritten by Heiko Eissfeldt (hexcoder-)
 # tested with:
 #   gnu awk (x86 Linux)
 #   bsd awk (x86 *BSD)
@@ -603,8 +603,8 @@ BEGIN {
     # create path for the trace file from afl-showmap
     tracefile_path = trace_dir"/"fn
     # ensure the file size is not zero
-    cmd = "du -b "tracefile_path
-    "ls -l "tracefile_path
+    cmd = "du -b \""tracefile_path"\""
+    # "ls -l \""tracefile_path"\""
     cmd | getline output
     close(cmd)
     split(output, result, "\t")
diff --git a/afl-cmin.bash b/afl-cmin.bash
index 6c271220..99ae80d9 100755
--- a/afl-cmin.bash
+++ b/afl-cmin.bash
@@ -152,6 +152,7 @@ Minimization settings:
   -e            - solve for edge coverage only, ignore hit counts
 
 For additional tips, please consult README.md.
+This script cannot read filenames that end with a space ' '.
 
 Environment variables used:
 AFL_KEEP_TRACES: leave the temporary <out_dir>\.traces directory
diff --git a/docs/Changelog.md b/docs/Changelog.md
index 48c0ab06..f288c33c 100644
--- a/docs/Changelog.md
+++ b/docs/Changelog.md
@@ -6,8 +6,11 @@
 ### Version ++4.21a (dev)
   * afl-fuzz
     - fix AFL_PERSISTENT_RECORD
+    - prevent filenames in the queue that have spaces
   * afl-cc:
     - fixes for LTO and outdated afl-gcc mode
+  * afl-cmin
+    - work with input files that have a space
 
 
 ### Version ++4.20c (release)
diff --git a/src/afl-fuzz-init.c b/src/afl-fuzz-init.c
index b844123d..2d540eb1 100644
--- a/src/afl-fuzz-init.c
+++ b/src/afl-fuzz-init.c
@@ -459,6 +459,24 @@ void bind_to_free_cpu(afl_state_t *afl) {
 
 #endif                                                     /* HAVE_AFFINITY */
 
+/* transforms spaces in a string to underscores (inplace) */
+
+static void no_spaces(u8 *string) {
+
+  if (string) {
+
+    u8 *ptr = string;
+    while (*ptr != 0) {
+
+      if (*ptr == ' ') { *ptr = '_'; }
+      ++ptr;
+
+    }
+
+  }
+
+}
+
 /* Shuffle an array of pointers. Might be slightly biased. */
 
 static void shuffle_ptrs(afl_state_t *afl, void **ptrs, u32 cnt) {
@@ -1381,11 +1399,11 @@ void perform_dry_run(afl_state_t *afl) {
 static void link_or_copy(u8 *old_path, u8 *new_path) {
 
   s32 i = link(old_path, new_path);
+  if (!i) { return; }
+
   s32 sfd, dfd;
   u8 *tmp;
 
-  if (!i) { return; }
-
   sfd = open(old_path, O_RDONLY);
   if (sfd < 0) { PFATAL("Unable to open '%s'", old_path); }
 
@@ -1495,6 +1513,9 @@ void pivot_inputs(afl_state_t *afl) {
           afl->fsrv.total_execs, use_name, afl->file_extension ? "." : "",
           afl->file_extension ? (const char *)afl->file_extension : "");
 
+      u8 *pos = strrchr(nfn, '/');
+      no_spaces(pos + 30);
+
 #else
 
       nfn = alloc_printf(