diff --git a/src/cache.c b/src/cache.c index 0554b7f..b3ed50b 100644 --- a/src/cache.c +++ b/src/cache.c @@ -665,7 +665,11 @@ void cache_end_insert(void) if (flags & (F_IPV4 | F_IPV6 | F_DNSKEY | F_DS | F_SRV)) read_write(daemon->pipe_to_parent, (unsigned char *)&new_chain->addr, sizeof(new_chain->addr), 0); if (flags & F_SRV) - blockdata_write(new_chain->addr.srv.target, new_chain->addr.srv.targetlen, daemon->pipe_to_parent); + { + /* A negative SRV entry is possible and has no data, obviously. */ + if (!(flags & F_NEG)) + blockdata_write(new_chain->addr.srv.target, new_chain->addr.srv.targetlen, daemon->pipe_to_parent); + } #ifdef HAVE_DNSSEC if (flags & F_DNSKEY) { @@ -737,7 +741,7 @@ int cache_recv_insert(time_t now, int fd) if (!read_write(fd, (unsigned char *)&addr, sizeof(addr), 1)) return 0; - if (flags & F_SRV && !(addr.srv.target = blockdata_read(fd, addr.srv.targetlen))) + if ((flags & F_SRV) && !(flags & F_NEG) && !(addr.srv.target = blockdata_read(fd, addr.srv.targetlen))) return 0; #ifdef HAVE_DNSSEC