contrib/fuzz/README.rst
author Augie Fackler <augie@google.com>
Mon, 08 Jul 2019 13:12:20 -0400
branchstable
changeset 42562 97ada9b8d51b
parent 36700 e437de3881c1
permissions -rw-r--r--
posix: always seek to EOF when opening a file in append mode Python 3 already does this, so skip it there. Consider the program: #include <stdio.h> int main() { FILE *f = fopen("narf", "w"); fprintf(f, "narf\n"); fclose(f); f = fopen("narf", "a"); printf("%ld\n", ftell(f)); fprintf(f, "troz\n"); printf("%ld\n", ftell(f)); return 0; } on macOS, FreeBSD, and Linux with glibc, this program prints 5 10 but on musl libc (Alpine Linux and probably others) this prints 0 10 By my reading of https://pubs.opengroup.org/onlinepubs/009695399/functions/fopen.html this is technically correct, specifically: > Opening a file with append mode (a as the first character in the > mode argument) shall cause all subsequent writes to the file to be > forced to the then current end-of-file, regardless of intervening > calls to fseek(). in other words, the file position doesn't really matter in append-mode files, and we can't depend on it being at all meaningful unless we perform a seek() before tell() after open(..., 'a'). Experimentally after a .write() we can do a .tell() and it'll always be reasonable, but I'm unclear from reading the specification if that's a smart thing to rely on. This matches what we do on Windows and what Python 3 does for free, so let's just be consistent. Thanks to Yuya for the idea.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36680
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
     1
How to add fuzzers (partially cribbed from oss-fuzz[0]):
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
     2
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
     3
  1) git clone https://github.com/google/oss-fuzz
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
     4
  2) cd oss-fuzz
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
     5
  3) python infra/helper.py build_image mercurial
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
     6
  4) docker run --cap-add=SYS_PTRACE -it -v $HG_REPO_PATH:/hg-new \
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
     7
         gcr.io/oss-fuzz/mercurial bash
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
     8
  5) cd /src
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
     9
  6) rm -r mercurial
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
    10
  7) ln -s /hg-new mercurial
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
    11
  8) cd mercurial
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
    12
  9) compile
36700
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
    13
  10) ls $OUT
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
    14
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
    15
Step 9 is literally running the command "compile", which is part of
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
    16
the docker container. Once you have that working, you can build the
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
    17
fuzzers like this (in the oss-fuzz repo):
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
    18
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
    19
python infra/helper.py build_fuzzers --sanitizer address mercurial $HG_REPO_PATH
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
    20
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
    21
(you can also say "memory", "undefined" or "coverage" for
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
    22
sanitizer). Then run the built fuzzers like this:
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
    23
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
    24
python infra/helper.py run_fuzzer mercurial -- $FUZZER
36680
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
    25
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
    26
0: https://github.com/google/oss-fuzz/blob/master/docs/new_project_guide.md