File: fuzz_blob.py

package info (click to toggle)
python-git 3.1.45-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,772 kB
  • sloc: python: 18,642; sh: 186; makefile: 78
file content (40 lines) | stat: -rw-r--r-- 1,064 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import atheris
import sys
import os
import tempfile

if getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS"):
    path_to_bundled_git_binary = os.path.abspath(os.path.join(os.path.dirname(__file__), "git"))
    os.environ["GIT_PYTHON_GIT_EXECUTABLE"] = path_to_bundled_git_binary

with atheris.instrument_imports():
    import git


def TestOneInput(data):
    fdp = atheris.FuzzedDataProvider(data)

    with tempfile.TemporaryDirectory() as temp_dir:
        repo = git.Repo.init(path=temp_dir)
        binsha = fdp.ConsumeBytes(20)
        mode = fdp.ConsumeInt(fdp.ConsumeIntInRange(0, fdp.remaining_bytes()))
        path = fdp.ConsumeUnicodeNoSurrogates(fdp.remaining_bytes())

        try:
            blob = git.Blob(repo, binsha, mode, path)
        except AssertionError as e:
            if "Require 20 byte binary sha, got" in str(e):
                return -1
            else:
                raise e

        _ = blob.mime_type


def main():
    atheris.Setup(sys.argv, TestOneInput)
    atheris.Fuzz()


if __name__ == "__main__":
    main()