diff --git a/CHANGES/5320.feature b/CHANGES/5320.feature new file mode 100644 index 00000000000..2066e6a301f --- /dev/null +++ b/CHANGES/5320.feature @@ -0,0 +1 @@ +Implements new feature of fuzzers with the purpose of integrating aiohttp with OSS-Fuzz. diff --git a/fuzzers/fuzz_http_parser.py b/fuzzers/fuzz_http_parser.py new file mode 100644 index 00000000000..4716091a976 --- /dev/null +++ b/fuzzers/fuzz_http_parser.py @@ -0,0 +1,30 @@ +#!/usr/bin/python3 +import asyncio +import sys + +import atheris + +import aiohttp +from aiohttp.base_protocol import BaseProtocol + + +def TestOneInput(data): + loop = asyncio.get_event_loop() + pr = BaseProtocol(loop) + h_p = aiohttp.http_parser.HttpRequestParser(pr, loop, 32768) + try: + h_p.feed_data(data) + except aiohttp.http_exceptions.HttpProcessingError: + return + return + + +def main(): + atheris.Setup(sys.argv, TestOneInput, enable_python_coverage=True) + loop = asyncio.get_event_loop() + asyncio.set_event_loop(loop) + atheris.Fuzz() + + +if __name__ == "__main__": + main() diff --git a/fuzzers/fuzz_payload_url.py b/fuzzers/fuzz_payload_url.py new file mode 100644 index 00000000000..6f8432acdd7 --- /dev/null +++ b/fuzzers/fuzz_payload_url.py @@ -0,0 +1,33 @@ +#!/usr/bin/python3 +import sys + +import atheris +from yarl import URL + +from aiohttp import payload + + +def TestOneInput(data): + fdp = atheris.FuzzedDataProvider(data) + original = fdp.ConsumeString(sys.maxsize) + + try: + payload.StringPayload(original) + except UnicodeEncodeError: + None + + try: + URL(original) + except ValueError: + None + + return + + +def main(): + atheris.Setup(sys.argv, TestOneInput, enable_python_coverage=True) + atheris.Fuzz() + + +if __name__ == "__main__": + main()