From e6841e12a2673a7a84bdaa0eef49ffb6257df836 Mon Sep 17 00:00:00 2001 From: DavidKorczynski Date: Tue, 1 Nov 2022 09:01:14 -0400 Subject: [PATCH] oracle-py-cx: select port from a range (#8905) Fixes: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=52934 --- projects/oracle-py-cx/fuzz_basic.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/projects/oracle-py-cx/fuzz_basic.py b/projects/oracle-py-cx/fuzz_basic.py index 70500190a..7c1adf3f7 100644 --- a/projects/oracle-py-cx/fuzz_basic.py +++ b/projects/oracle-py-cx/fuzz_basic.py @@ -29,10 +29,10 @@ def SetFuzzedInput(input_bytes): class ServerThread(threading.Thread): - def __init__(self): + def __init__(self, port): 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", 8009)) + self.s.bind(("127.0.0.1", port)) self.s.settimeout(0.4) self.s.listen(1) @@ -55,14 +55,26 @@ class ServerThread(threading.Thread): @atheris.instrument_func def TestInput(data): - t1 = ServerThread() + port = None + for i in range(8009, 8100): + try: + t1 = ServerThread(i) + except OSError: + # If the address is already in use by another + continue + port = i + break + + if port == None: + return + t1.start() fdp = atheris.FuzzedDataProvider(data) args = dict() args['user'] = fdp.ConsumeUnicodeNoSurrogates(64) args['password'] = fdp.ConsumeUnicodeNoSurrogates(64) - args['dsn'] = "127.0.0.1:8009" + args['dsn'] = f"127.0.0.1:{port}" if fdp.ConsumeBool(): args['newpassword'] = fdp.ConsumeUnicodeNoSurrogates(64) if fdp.ConsumeBool():