| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 797009d commit c84e643
5 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -240,8 +240,8 @@ Please have a look at the [contributions file][contributing]. | |||
| 240 | 240 | ||
| 241 | 241 | [3-Clause BSD License](https://opensource.org/license/bsd-3-clause/), also known as the New BSD License. See the [LICENSE file][license]. | |
| 242 | 242 | ||
| 243 | - Two files exclusively used for fuzz testing are subject to [a separate license, detailed here](./fuzzing/README.md#license). | ||
| 244 | - These files are not included in the wheel or sdist packages published by the maintainers of GitPython. | ||
| 243 | + One file exclusively used for fuzz testing is subject to [a separate license, detailed here](./fuzzing/README.md#license). | ||
| 244 | + This file is not included in the wheel or sdist packages published by the maintainers of GitPython. | ||
| 245 | 245 | ||
| 246 | 246 | [contributing]: https://github.com/gitpython-developers/GitPython/blob/main/CONTRIBUTING.md | |
| 247 | 247 | [license]: https://github.com/gitpython-developers/GitPython/blob/main/LICENSE | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -225,14 +225,14 @@ to [the official OSS-Fuzz documentation][oss-fuzz-docs]. | |||
| 225 | 225 | ## LICENSE | |
| 226 | 226 | ||
| 227 | 227 | All files located within the `fuzzing/` directory are subject to [the same license](../LICENSE) | |
| 228 | - as [the other files in this repository](../README.md#license) with two exceptions: | ||
| 229 | - | ||
| 230 | - Two files located in this directory, [`fuzz_config.py`](./fuzz-targets/fuzz_config.py) | ||
| 231 | - and [`fuzz_tree.py`](./fuzz-targets/fuzz_tree.py), have been migrated here from the OSS-Fuzz project repository where | ||
| 232 | - they were originally created. As such, these two files retain their original license and copyright notice (Apache | ||
| 233 | - License, Version 2.0 and Copyright 2023 Google LLC respectively.) Each file includes a notice in their respective header | ||
| 234 | - comments stating that they have been modified. [LICENSE-APACHE](./LICENSE-APACHE) contains the original license used by | ||
| 235 | - the OSS-Fuzz project repository at the time they were migrated. | ||
| 228 | + as [the other files in this repository](../README.md#license) with one exception: | ||
| 229 | + | ||
| 230 | + [`fuzz_config.py`](./fuzz-targets/fuzz_config.py) was migrated to this repository from the OSS-Fuzz project's repository | ||
| 231 | + where it was originally created. As such, [`fuzz_config.py`](./fuzz-targets/fuzz_config.py) retains its original license | ||
| 232 | + and copyright notice (Apache License, Version 2.0 and Copyright 2023 Google LLC respectively) as in a header | ||
| 233 | + comment, followed by a notice stating that it has have been modified contributors to GitPython. | ||
| 234 | + [LICENSE-APACHE](./LICENSE-APACHE) contains the original license used by the OSS-Fuzz project repository at the time the | ||
| 235 | + file was migrated. | ||
| 236 | 236 | ||
| 237 | 237 | [oss-fuzz-repo]: https://github.com/google/oss-fuzz | |
| 238 | 238 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,47 @@ | |||
| 1 | + import atheris | ||
| 2 | + import io | ||
| 3 | + import sys | ||
| 4 | + import os | ||
| 5 | + import tempfile | ||
| 6 | + | ||
| 7 | + if getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS"): | ||
| 8 | + path_to_bundled_git_binary = os.path.abspath(os.path.join(os.path.dirname(__file__), "git")) | ||
| 9 | + os.environ["GIT_PYTHON_GIT_EXECUTABLE"] = path_to_bundled_git_binary | ||
| 10 | + | ||
| 11 | + with atheris.instrument_imports(): | ||
| 12 | + import git | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + def TestOneInput(data): | ||
| 16 | + fdp = atheris.FuzzedDataProvider(data) | ||
| 17 | + | ||
| 18 | + with tempfile.TemporaryDirectory() as temp_dir: | ||
| 19 | + repo = git.Repo.init(path=temp_dir) | ||
| 20 | + | ||
| 21 | + # Generate a minimal set of files based on fuzz data to minimize I/O operations. | ||
| 22 | + file_paths = [os.path.join(temp_dir, f"File{i}") for i in range(min(3, fdp.ConsumeIntInRange(1, 3)))] | ||
| 23 | + for file_path in file_paths: | ||
| 24 | + with open(file_path, "wb") as f: | ||
| 25 | + # The chosen upperbound for count of bytes we consume by writing to these | ||
| 26 | + # files is somewhat arbitrary and may be worth experimenting with if the | ||
| 27 | + # fuzzer coverage plateaus. | ||
| 28 | + f.write(fdp.ConsumeBytes(fdp.ConsumeIntInRange(1, 512))) | ||
| 29 | + | ||
| 30 | + repo.index.add(file_paths) | ||
| 31 | + repo.index.commit(fdp.ConsumeUnicodeNoSurrogates(fdp.ConsumeIntInRange(1, 80))) | ||
| 32 | + | ||
| 33 | + fuzz_tree = git.Tree(repo, git.Tree.NULL_BIN_SHA, 0, "") | ||
| 34 | + | ||
| 35 | + try: | ||
| 36 | + fuzz_tree._deserialize(io.BytesIO(data)) | ||
| 37 | + except IndexError: | ||
| 38 | + return -1 | ||
| 39 | + | ||
| 40 | + | ||
| 41 | + def main(): | ||
| 42 | + atheris.Setup(sys.argv, TestOneInput) | ||
| 43 | + atheris.Fuzz() | ||
| 44 | + | ||
| 45 | + | ||
| 46 | + if __name__ == "__main__": | ||
| 47 | + main() | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments