From 261da2a6685c0185283dbf72ce543e9fd81e9bd8 Mon Sep 17 00:00:00 2001 From: Max Dymond Date: Sat, 2 Sep 2017 22:40:01 +0100 Subject: ossfuzz: add some more handled CURL options Add support for HEADER, COOKIE, RANGE, CUSTOMREQUEST, MAIL_RECIPIENT, MAIL_FROM and uploading data. --- tests/fuzz/generate_corpus.py | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'tests/fuzz/generate_corpus.py') diff --git a/tests/fuzz/generate_corpus.py b/tests/fuzz/generate_corpus.py index 0bb2eda3c..04c799926 100755 --- a/tests/fuzz/generate_corpus.py +++ b/tests/fuzz/generate_corpus.py @@ -36,6 +36,27 @@ def generate_corpus(options): enc.maybe_write_string(enc.TYPE_USERNAME, options.username) enc.maybe_write_string(enc.TYPE_PASSWORD, options.password) enc.maybe_write_string(enc.TYPE_POSTFIELDS, options.postfields) + enc.maybe_write_string(enc.TYPE_COOKIE, options.cookie) + enc.maybe_write_string(enc.TYPE_RANGE, options.range) + enc.maybe_write_string(enc.TYPE_CUSTOMREQUEST, options.customrequest) + enc.maybe_write_string(enc.TYPE_MAIL_FROM, options.mailfrom) + + # Write the first upload to the file. + if options.upload1: + enc.write_bytes(enc.TYPE_UPLOAD1, options.upload1.encode("utf-8")) + elif options.upload1file: + with open(options.upload1file, "rb") as g: + enc.write_bytes(enc.TYPE_UPLOAD1, g.read()) + + # Write an array of headers to the file. + if options.header: + for header in options.header: + enc.write_string(enc.TYPE_HEADER, header) + + # Write an array of headers to the file. + if options.mailrecipient: + for mailrecipient in options.mailrecipient: + enc.write_string(enc.TYPE_MAIL_RECIPIENT, mailrecipient) return ScriptRC.SUCCESS @@ -46,6 +67,13 @@ class TLVEncoder(object): TYPE_USERNAME = 3 TYPE_PASSWORD = 4 TYPE_POSTFIELDS = 5 + TYPE_HEADER = 6 + TYPE_COOKIE = 7 + TYPE_UPLOAD1 = 8 + TYPE_RANGE = 9 + TYPE_CUSTOMREQUEST = 10 + TYPE_MAIL_RECIPIENT = 11 + TYPE_MAIL_FROM = 12 def __init__(self, output): self.output = output @@ -58,7 +86,7 @@ class TLVEncoder(object): self.write_tlv(tlv_type, len(bytedata), bytedata) def maybe_write_string(self, tlv_type, wstring): - if wstring: + if wstring is not None: self.write_string(tlv_type, wstring) def write_tlv(self, tlv_type, tlv_length, tlv_data=None): @@ -84,12 +112,22 @@ def get_options(): parser.add_argument("--username") parser.add_argument("--password") parser.add_argument("--postfields") + parser.add_argument("--header", action="append") + parser.add_argument("--cookie") + parser.add_argument("--range") + parser.add_argument("--customrequest") + parser.add_argument("--mailfrom") + parser.add_argument("--mailrecipient", action="append") rsp1 = parser.add_mutually_exclusive_group(required=True) rsp1.add_argument("--rsp1") rsp1.add_argument("--rsp1file") rsp1.add_argument("--rsp1test", type=int) + upload1 = parser.add_mutually_exclusive_group() + upload1.add_argument("--upload1") + upload1.add_argument("--upload1file") + return parser.parse_args() -- cgit v1.2.3