about summary refs log tree commit diff
path: root/src/afl-showmap.c
diff options
context:
space:
mode:
authorDominik Maier <domenukk@gmail.com>2020-03-09 21:34:11 +0100
committerDominik Maier <domenukk@gmail.com>2020-03-09 21:34:11 +0100
commit1136e887bdf77ed64bd3eac28bf7f86705dd2a6d (patch)
tree2c7d0e877c1e6f4fb09e268ca0a194c41bc91f23 /src/afl-showmap.c
parent416020daefb2587fe071a456e1dbb8ffbb007e6a (diff)
downloadafl++-1136e887bdf77ed64bd3eac28bf7f86705dd2a6d.tar.gz
now wiht 90% less leaks
Diffstat (limited to 'src/afl-showmap.c')
-rw-r--r--src/afl-showmap.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/afl-showmap.c b/src/afl-showmap.c
index 771fa733..bed249c4 100644
--- a/src/afl-showmap.c
+++ b/src/afl-showmap.c
@@ -61,8 +61,9 @@
 
 u8 be_quiet;
 
-u8 *stdin_file,                        /* stdin file                        */
-    *in_dir,                           /* input folder                      */
+char*stdin_file;                       /* stdin file                        */
+
+u8  *in_dir,                           /* input folder                      */
     *doc_path,                         /* Path to docs                      */
         *at_file = NULL;               /* Substitution string for @@        */
 
@@ -702,16 +703,19 @@ static void find_binary(afl_forkserver_t* fsrv, u8* fname) {
 
 /* Main entry point */
 
-int main(int argc, char** argv, char** envp) {
+int main(int argc, char** argv_orig, char** envp) {
 
   // TODO: u64 mem_limit = MEM_LIMIT;                  /* Memory limit (MB) */
 
   s32    opt, i;
   u8     mem_limit_given = 0, timeout_given = 0, unicorn_mode = 0, use_wine = 0;
   u32    tcnt = 0;
-  char** use_argv;
+  char **use_argv;
+
+  char **argv = argv_cpy_dup(argc, argv_orig);
 
-  afl_forkserver_t* fsrv = calloc(1, sizeof(afl_forkserver_t));
+  afl_forkserver_t fsrv_var = {0};
+  afl_forkserver_t* fsrv = &fsrv_var;
   afl_fsrv_init(fsrv);
 
   doc_path = access(DOC_PATH, F_OK) ? "docs" : DOC_PATH;
@@ -957,7 +961,12 @@ int main(int argc, char** argv, char** envp) {
     fsrv->out_fd = open(stdin_file, O_RDWR | O_CREAT | O_EXCL, 0600);
     if (fsrv->out_fd < 0) PFATAL("Unable to create '%s'", fsrv->out_file);
 
-    if (arg_offset) argv[arg_offset] = stdin_file;
+    if (arg_offset && argv[arg_offset] != stdin_file) {
+      
+      ck_free(argv[arg_offset]);
+      argv[arg_offset] = strdup(stdin_file);
+
+    }
 
     if (get_afl_env("AFL_DEBUG")) {
 
@@ -1024,7 +1033,7 @@ int main(int argc, char** argv, char** envp) {
   if (stdin_file) {
 
     unlink(stdin_file);
-    free(stdin_file);
+    ck_free(stdin_file);
     stdin_file = NULL;
 
   }
@@ -1033,12 +1042,13 @@ int main(int argc, char** argv, char** envp) {
 
   u32 ret = child_crashed * 2 + fsrv->child_timed_out;
 
-  if (fsrv->target_path) free(fsrv->target_path);
+  if (fsrv->target_path) ck_free(fsrv->target_path);
 
   afl_fsrv_deinit(fsrv);
-  free(fsrv);
   if (stdin_file) ck_free(stdin_file);
 
+  argv_cpy_free(argv);
+
   exit(ret);
 
 }