better dumps from the fuzzer (shown on errors) - include the
authordjm <djm@openbsd.org>
Sun, 18 Jan 2015 19:50:55 +0000 (19:50 +0000)
committerdjm <djm@openbsd.org>
Sun, 18 Jan 2015 19:50:55 +0000 (19:50 +0000)
original data as well as the fuzzed copy.

regress/usr.bin/ssh/unittests/test_helper/fuzz.c

index b9a2fec..2003fbe 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: fuzz.c,v 1.5 2015/01/13 14:51:51 djm Exp $    */
+/*     $OpenBSD: fuzz.c,v 1.6 2015/01/18 19:50:55 djm Exp $    */
 /*
  * Copyright (c) 2011 Damien Miller <djm@mindrot.org>
  *
@@ -150,19 +150,11 @@ fuzz_fmt(struct fuzz *fuzz, char *s, size_t n)
        }
 }
 
-void
-fuzz_dump(struct fuzz *fuzz)
+static void
+dump(u_char *p, size_t len)
 {
-       u_char *p = fuzz_ptr(fuzz);
-       size_t i, j, len = fuzz_len(fuzz);
-       char buf[256];
+       size_t i, j;
 
-       if (fuzz_fmt(fuzz, buf, sizeof(buf)) != 0) {
-               fprintf(stderr, "%s: fuzz invalid\n", __func__);
-               abort();
-       }
-       fputs(buf, stderr);
-       fprintf(stderr, "fuzz context %p len = %zu\n", fuzz, len);
        for (i = 0; i < len; i += 16) {
                fprintf(stderr, "%.4zd: ", i);
                for (j = i; j < i + 16; j++) {
@@ -184,6 +176,22 @@ fuzz_dump(struct fuzz *fuzz)
        }
 }
 
+void
+fuzz_dump(struct fuzz *fuzz)
+{
+       char buf[256];
+
+       if (fuzz_fmt(fuzz, buf, sizeof(buf)) != 0) {
+               fprintf(stderr, "%s: fuzz invalid\n", __func__);
+               abort();
+       }
+       fputs(buf, stderr);
+       fprintf(stderr, "fuzz original %p len = %zu\n", fuzz->seed, fuzz->slen);
+       dump(fuzz->seed, fuzz->slen);
+       fprintf(stderr, "fuzz context %p len = %zu\n", fuzz, fuzz_len(fuzz));
+       dump(fuzz_ptr(fuzz), fuzz_len(fuzz));
+}
+
 #ifdef SIGINFO
 static struct fuzz *last_fuzz;