From 2f117cad04eb02ed20bc5f8ae8f955c5f4c77a77 Mon Sep 17 00:00:00 2001 From: DavidKorczynski Date: Tue, 10 May 2022 14:20:54 +0100 Subject: [PATCH] requests: refactor to enable coverage (#7692) The fuzzer got stuck in `accept` when running in coverage mode. This causes coverage builds to timeout. This fixes it locally for me. --- projects/requests/fuzz_server.py | 35 +++++++++++++++++--------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/projects/requests/fuzz_server.py b/projects/requests/fuzz_server.py index 5d7f6f42b..e66f51163 100644 --- a/projects/requests/fuzz_server.py +++ b/projects/requests/fuzz_server.py @@ -34,40 +34,43 @@ def SetFuzzedInput(input_bytes): class ServerThread(threading.Thread): def __init__(self): + self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.s.bind(("127.0.0.1", 8001)) + self.s.listen(1) + threading.Thread.__init__(self) def run(self): global fuzzed_input - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.bind(("127.0.0.1", 8001)) - s.listen(1) - while 1: - conn, addr = s.accept() - conn.recv(1024) - conn.send(fuzzed_input) - time.sleep(0.005) - conn.close() + conn, addr = self.s.accept() + conn.recv(1024) + conn.send(fuzzed_input) + time.sleep(0.005) + conn.close() + self.s.shutdown(1) + self.s.close() + time.sleep(0.01) def TestOneInput(input_bytes): + t1 = ServerThread() + # Launch threads + t1.start() SetFuzzedInput(input_bytes) try: - r = requests.get('http://127.0.0.1:8001/', timeout=0.01) + r = requests.get('http://127.0.0.1:8001/', timeout=2.0) r.status_code r.headers r.text except requests.exceptions.RequestException as e: pass + t1.join() def main(): + atheris.instrument_all() atheris.Setup(sys.argv, TestOneInput, enable_python_coverage=True) - t1 = ServerThread() - # Launch threads - t1.start() - atheris.Fuzz() - # Wait for threads to finish - t1.join() if __name__ == "__main__":