| /* |
| * unbound-fuzzme.c - parse a packet provided on stdin (for fuzzing). |
| * |
| */ |
| #include "config.h" |
| #include "util/regional.h" |
| #include "util/module.h" |
| #include "util/config_file.h" |
| #include "iterator/iterator.h" |
| #include "iterator/iter_priv.h" |
| #include "iterator/iter_scrub.h" |
| #include "util/log.h" |
| #include "sldns/sbuffer.h" |
| |
| int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len) { |
| log_init("/tmp/foo", 0, NULL); |
| char *bin = buf; |
| struct regional* reg; |
| |
| struct sldns_buffer *pkt = sldns_buffer_new(1); |
| sldns_buffer_new_frm_data(pkt, bin, len); |
| |
| reg = regional_create(); |
| |
| struct msg_parse msg; |
| struct edns_data edns; |
| memset(&msg, 0, sizeof(struct msg_parse)); |
| memset(&edns, 0, sizeof(edns)); |
| if (parse_packet(pkt, &msg, reg) != LDNS_RCODE_NOERROR) { |
| goto out; |
| } |
| if (parse_extract_edns(&msg, &edns, reg) != LDNS_RCODE_NOERROR) { |
| goto out; |
| } |
| |
| |
| struct query_info qinfo_out; |
| memset(&qinfo_out, 0, sizeof(struct query_info)); |
| qinfo_out.qname = (unsigned char *) "\03nic\02de"; |
| uint8_t *peter = (unsigned char *) "\02de"; // zonename |
| struct module_env env; |
| memset(&env, 0, sizeof(struct module_env)); |
| struct config_file cfg; |
| memset(&cfg, 0, sizeof(struct config_file)); |
| cfg.harden_glue = 1; // crashes now, want to remove that later |
| env.cfg = &cfg; |
| |
| struct iter_env ie; |
| memset(&ie, 0, sizeof(struct iter_env)); |
| |
| struct iter_priv priv; |
| memset(&priv, 0, sizeof(struct iter_priv)); |
| ie.priv = &priv; |
| scrub_message(pkt, &msg, &qinfo_out, peter, reg, &env, &ie); |
| out: |
| regional_destroy(reg); |
| sldns_buffer_free(pkt); |
| return 0; |
| } |