| /* |
| * Copyright (C) The c-ares project |
| * |
| * Permission to use, copy, modify, and distribute this |
| * software and its documentation for any purpose and without |
| * fee is hereby granted, provided that the above copyright |
| * notice appear in all copies and that both that copyright |
| * notice and this permission notice appear in supporting |
| * documentation, and that the name of M.I.T. not be used in |
| * advertising or publicity pertaining to distribution of the |
| * software without specific, written prior permission. |
| * M.I.T. makes no representations about the suitability of |
| * this software for any purpose. It is provided "as is" |
| * without express or implied warranty. |
| * |
| * SPDX-License-Identifier: MIT |
| */ |
| #include <stddef.h> |
| |
| #include "ares.h" |
| |
| int LLVMFuzzerTestOneInput(const unsigned char *data, unsigned long size); |
| |
| // Entrypoint for Clang's libfuzzer |
| int LLVMFuzzerTestOneInput(const unsigned char *data, unsigned long size) |
| { |
| // Feed the data into each of the ares_parse_*_reply functions. |
| struct hostent *host = NULL; |
| struct ares_addrttl info[5]; |
| struct ares_addr6ttl info6[5]; |
| unsigned char addrv4[4] = { 0x10, 0x20, 0x30, 0x40 }; |
| struct ares_srv_reply *srv = NULL; |
| struct ares_mx_reply *mx = NULL; |
| struct ares_txt_reply *txt = NULL; |
| struct ares_soa_reply *soa = NULL; |
| struct ares_naptr_reply *naptr = NULL; |
| struct ares_caa_reply *caa = NULL; |
| struct ares_uri_reply *uri = NULL; |
| int count = 5; |
| ares_parse_a_reply(data, (int)size, &host, info, &count); |
| if (host) { |
| ares_free_hostent(host); |
| } |
| |
| host = NULL; |
| count = 5; |
| ares_parse_aaaa_reply(data, (int)size, &host, info6, &count); |
| if (host) { |
| ares_free_hostent(host); |
| } |
| |
| host = NULL; |
| ares_parse_ptr_reply(data, (int)size, addrv4, sizeof(addrv4), AF_INET, &host); |
| if (host) { |
| ares_free_hostent(host); |
| } |
| |
| host = NULL; |
| ares_parse_ns_reply(data, (int)size, &host); |
| if (host) { |
| ares_free_hostent(host); |
| } |
| |
| ares_parse_srv_reply(data, (int)size, &srv); |
| if (srv) { |
| ares_free_data(srv); |
| } |
| |
| ares_parse_mx_reply(data, (int)size, &mx); |
| if (mx) { |
| ares_free_data(mx); |
| } |
| |
| ares_parse_txt_reply(data, (int)size, &txt); |
| if (txt) { |
| ares_free_data(txt); |
| } |
| |
| ares_parse_soa_reply(data, (int)size, &soa); |
| if (soa) { |
| ares_free_data(soa); |
| } |
| |
| ares_parse_naptr_reply(data, (int)size, &naptr); |
| if (naptr) { |
| ares_free_data(naptr); |
| } |
| |
| ares_parse_caa_reply(data, (int)size, &caa); |
| if (caa) { |
| ares_free_data(caa); |
| } |
| |
| ares_parse_uri_reply(data, (int)size, &uri); |
| if (uri) { |
| ares_free_data(uri); |
| } |
| |
| return 0; |
| } |